{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 0,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%   a collection of of notebook computations associated with v2e\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true,
    "pycharm": {
     "name": "#%% plot lin-log\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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I845HtjXyY8fOsCfnj5GhhnXrF/EqzbVcumqSk2NLCJRBR42ZvZ74Frgc865jwVdHonu+PAYt21v5ccPH6Cpo5+KgmzeeeUqXr25luoSncWIyKkFGjZmdiNwfpBlkFM70jPEfz/YzM8bD9E3PMb5S0v46j+dz0vOqyYnU4NeikhsAgsbMysFvga8B/h5UOWQ6J452sctf23i9sfaGJ9wvPjcat58aT0basuCLpqIJKEgz2y+BDzpnPuFmSls5olHDoT57v37uXf3MXKzMnj1plpuet4KlpXnB100EUligYSNmV0KvA5dQps3HtrfydfveYatB8KU5Wfxb1ev5nUX11FekB100UQkBfgeNmaWBXwX+LJzbo/f+5eTNTSF+No9e2lsDrOoOIdPvnQ9r7qolrxstceISPwEcWbz70Ae8LlYNjazm4GbAWpraxNYrPSytTnM1+7Zy8NNIaqKvJC5cVOtZroUkYTwNWzMrBb4KHATkGNmOVNW50RuGuhzzo1PLnTO3QLcArBx40bnZ3lT0RNtPXzx90/zt2c6qSzM4ePXreefNytkRCSx/D6zWQHkAj+Nsu79kccG4DE/C5UOWrsG+Mof9/LbHW2U5Wfx0Rev4zVblutymYj4wu+weQy4Msryv+AF0A+Afb6WKMX1DI7yX/ft478fPIABb79iJW+/YqXmjRERX/kaNs65buC+6csjIwEfdM793TqZnfEJx62PHOLLf9hD9+AoL99Qw/uuWasxy0QkEIEPVyPx91hLN5+44wl2tvawqb6cT1y3nnNqSoIuloiksXkRNs45jd4YB+H+Ef7zD09z6yMtVBXm8H9fdQHXn79Ec8iISODmRdjI3Djn+PX2Vj531276hsZ483PreffVqylSu4yIzBMKmyTX1j3IR36zi/v3dnBRXRmf/YdzWbu4KOhiiYicRGGTpJxz/HzrIb5w19NMOMd/XH82r92ynAzNJyMi85DCJgm1hAf499t28tD+EJesrOCLrzhPA2WKyLymsEkydzzWxsd++wQO+PzLz+XGTct0A4CIzHsKmyTRNzTKJ+94kt/saOM5y8v4+isv0NmMiCQNhU0S2NXawzt+/iitXQO86/mreddVq8hckBF0sUREYqawmed++cghPn7Hk1QWZHPrzRezqb486CKJiJwxhc08NTQ6zqfufJJbH2nh0lWVfOPGDZrI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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "import matplotlib\n",
    "from tqdm.notebook import tqdm\n",
    "from v2ecore.emulator import lin_log\n",
    "matplotlib.rcParams['pdf.fonttype'] = 42\n",
    "matplotlib.rcParams['ps.fonttype'] = 42\n",
    "\n",
    "y=np.array(range(255), float)\n",
    "l=lin_log(y,threshold=20)\n",
    "\n",
    "fnt=16\n",
    "# plt.subplot(211)\n",
    "# plt.rcParams.update({'font.size': fnt})\n",
    "# plt.plot(y,l)\n",
    "# plt.xlabel('log Y [DN]')\n",
    "# plt.ylabel('L')\n",
    "# plt.tight_layout()\n",
    "# plt.xscale('log')\n",
    "\n",
    "# plt.subplot(212)\n",
    "plt.rcParams.update({'font.size': fnt})\n",
    "plt.plot(y,l)\n",
    "plt.xlabel('Y [DN]')\n",
    "plt.ylabel('L')\n",
    "plt.tight_layout()\n",
    "plt.xscale('linear')\n",
    "\n",
    "plt.savefig('../output/linlog.pdf')\n",
    "plt.savefig('../media/linlog.png')\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%% noise sample\n",
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADnCAYAAAC9roUQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dedAkyVnef7Mz39wzO3tfmlV5F51otSsJ1pZECJCADdxcQjbCHHaEg8MOOSzjANQER9iGsDsQBIRsThsTYG7ZFgpoAStbIYQ4jISEVgtI7CK1pL1nj7nPnR3/kflOZWdnVmXdfbxPxBfVR3VVfVVZTz35vG++ue3SpUsoFAqFoh9cMfQBKBQKxSZBSVehUCh6hJKuQqFQ9AglXYVCoegRSroKhULRI5R0FQqFokco6SoUCkWPUNJVKBSKHqGkq1AoFD1CSVehUCh6hJKuQqFQ9AglXYVCoegRSroKhULRI5R0FQqFokdsDOlm4+m12Xj6j4c+DoVCsdnYGNIFvhn4rWw8vXLoA1EoFJuLTSLdfXa5e9CjUCgUG41NIt1ddrlz0KNQKBQbjU0iXVG4SroKhWIwbBLpqtJVKBSDYxNJd2vQo1AoFBuNTSJdtRcUCsXg2CTSVXtB0Tmy8XRvNp7uK19TsalQ0lUo2sXPAb8x9EEolhc7hj6AHqH2gqIP3AwcGvogFMsLVboKRbvYgbYxRQE2kXQ1e0HRJbZQ0q2NbDz9xmw8/eqhj6NLqL2gULQLVbrN8N3AMeB3hj6QrrCJSldvCEWXUKXbDFvAwaEPoktsktJV0lX0gR2ohdUEW8CeoQ+iS2wS6aq9oOgDai80wxZwYOiD6BJqLygU7ULthWbYAta65vUmkq52/RRdQpVuM2wBu7PxdG3P4SaS7tpeTMVSYAvYno2n24c+kBWFiKK1DaZtBOlm4+k21NNV9AOJk2iPqh7kvK2txbApgbQdwDb7eo50s/H0EPDvgbfNJqOzfR+YYu0gpLET0PZUHap01wS7nNe+0n0d8K+BV/Z3OIo1hirdZlh7pbsppOtORunfDLsC6ygUdSGkqzZWPay90t0Ue6FI6SrpKtqEay8oKsAGH8UGbE3pZuPp5wHvB14zm4w+29Z262JTlG4K6a71KBhF97ABW1W69eH2Qtu0F14E3AK8uMVt1samkK6rYlXpKrqCmyampFsdLum2aS/Ivb0UI902hXTVXlD0AdeuU9Ktjq6UrpLuAFB7QdEHtiKvFWnoWunub3GbtbEppFuUvbAzsI5CUQeqdJtBle4aQe0FRR9Q0m0G9XTXCEKsJ1F7QdEdXNJQ0q0OVbprBCHWE6jSVXQHVbrNsBGkuymDI+SkF5GuKt0ayMbTDPhh4Ntmk9G5gQ9naKjSbQbho+NoIG3loUq3O3wp8C3A7UMfyBJAlW4zyEPrKdZY6W4a6R5Hay+0jT3ecpPhkq6mjFWHnLMngYN2hF8bUNIdAGovdIfd3nKTofZCM7ikewWwr6XtKukOALUXuoMq3RxqLyQiG0+zbDz1SdC1F6A9X1c93QEgxHqKxZtBB0c0g5JuDlW66fgg8L3eZ67ShfZ8XVW6A2A3cM7+qb3QLpR0c6jSTccNwLXeZ77SVdJdYezCEO551F5IRjae3p6Np19RspqSbg5VugmwM/2GZk3u2l7YuQyzDG8S6Z7FkK5mL6Tju4BfK1lHA2k5NHshDRIgi5FuV/YCLIHa3RTSFXvhPLDlpaKovRDHfuBQSeqOKt0cvdoL2Xi6LRtPvyMbT5/X9b5axl677FvpwhIE0zaFdMVeuGDfb3nfgSq1EHZjCnMXnRsl3Rx92wu3AT8HvLmHfbUJUbp+b6BLpSv3virdnuDaCzB/QyjpxiFEWtRQlXRz9B1Iu9sudxWutXwosxeescs2le4R+1pJtye49gKESVdJYxEpUV8l3Rx9K10h3VXzj8vshXOYnPo2la6oZyXdnuBmL0CYdLfsbKSKHClKVwNpOYZSuqtGumVK9wJwjHZJV5SuerqCbDx9fTaeHupo8z7p+p7uRftaiWMeKSN5VOnmcEmjU9LNxtMt4JXeflcFKaTbZqUxtRd8ZOPpPuC9wLd3tIugp5uNp1dg1Mkx+7mS7jzUXqgGUbqn6Z4IPx8n/7TjfbWNMnuhNaWbjac7MNdFSdfDQcyx+CNU2oJ4uhLB3OktjzrrKXJoIK0aXNLtmgjvdl6vo9I9RjtKV+xD9XQ9yInoy17Y6XwOudJV4piHKt1qENLoi3SfAh5nvUj3udlk9BzGXmjD05U2fBRjI6qnayEnos3CxS5iKWNunV1QpetDA2nV0LfS/RBGFa4a6RbZC9IbbSuQJu3yDCYjQpWuhZyIrkg3ljImpKv2QhiFSteOVFOlm0PIL1TNrjVk4+l+jKf756wm6RYpXSHdtgJp0obPoqQ7hz6Ubih7Qe2FCDxCjTVUNylfz11/SveVmHt3VUlXlG5oRJqrdPfaLI0mcEn3JEq6l9G10i2zFzR7YRE7yNtHrKHuibzeVPSVvfCFdvkhwpXzlh2pSheak6S0S1W6HjojXavYYtkLai/E4ZKokm4atjDBmlDd5jZxN/CZ2WT0BKupdFNIV4RQU07w7QUNpFl0aS/sALah2QtVkVIOT9Y5hT6wwLS1C3Q/OOJujLUAq0m6qYE0aO7rqqcbgZyI/TaZuU0Isaq9UA1VlO7T6AMLDGk8S4dd/mw8vQbIMNYCrCbpitLdYQcoCUL2QptKVz1dB67kb2von0BOekjp6uCIOFKU7hzptjhl9qpiBx2TLnC1XT5ql6tMujB/7H3YC0q6Fu6JaNtiEDWr2QvVIOfiAuWk+wymLa3azd82hDS6JF05x+ed5aqd973Oa/c8hZRu2/aCeroWfZOu2gvlkHPxBGmk677fVPShdGW7F5zlqmYvQJx0u1K6u1pIQ2uEZSFd9+nTFemmjEjbdNJwIefiCOWBtKe995sKCaR1qT6l7UpbXnV7oU+le9K+HtRiWBbSPYA5KdA+6bqebixl7AymEW86abhwle7+iF/rerru+01F54E01oN092JUJ8yfJ3logeGDC7SvdEFJFzBK92H7uu2iNyn2wjnMRVHSzeEq3W3MqxN/HSVdA7EXLgBXdFQU363EJctVI9195MHroNKdTUaXaKfSmJJuBAeAh+zrLu2FmNI9h1G7m04aLlylC+GGqp7uPNxAGnSjdpOUbjaevsimly0VsvF0J+bhJG0mlr0A7VQa2w08h3kYCukOGkxbJtIVpduZvWCfnm4jVaUbh6t0QUk3BW4gDfoh3ZiV8XvAD3aw/6aQzIVCpWvRRqWx3cBZe++rp+tgP6Y26Bm6zV6A+UaqpBuHr3RD6kADafPoQ+mm2guHgAWlm42nu7PxdMjrJDaVPKh90n3Wed9GpbHd5PEitRfgcm2EA5inUJuT0QlcewEWSffibDK6iNoLPlKVrnhv7m82Fb7S7cJrTQ2k7ST8EPwfwC93cFypKCPdTpSufa2ka7EL2I45IV2Qrpu9APN5jTudz1XpzkPORRnpnrF/8n6TMYS9UES6oevxfOBFHRxXKqrYC8dpTpAh0i31dLPx9Puz8fTLGu47iGUgXTmpXSvdmL2gpBvGHkzFLFEkSrrl6NNeiJKu7T1uEb4ee8iHEg+BKkq3rUBaHaX774DXN9x3EMtEuqJ0u0oZi9kL0njVXpiHNNaihrrHrqOka9Cn0nU93R1eHrWsEyPdIbMaqpLuwYY1PVzSPYvJZCgkXWcG4TNF69XFMpCuSP2+7AV3tJAq3ThExRaR7m67zlnn/SZDSMNPTWwToewF2be/Tuh67MEUJxrqAVnVXthifoaSqrhMujaDIaXojS/UWsUykO6y2AtnUNJwIY21KM1G7YV5NFK6NrPgH5WsFvJ0IUy6MaULw1kMVQNp0CyDwVW6kFb0xh1Q0TqWgXRdpXuU7kg3lNfoK921I41sPP2LbDx9S42f7gHO2OmwT1FMumed95sMt/YCVFe6Xwu8MxtPX1iwTihlzP3c3W8R6XZiMWTj6bZsPP3ObDwNjWCEnHRTlS60T7plSted4qd1LAPp+kq3jcnoXOwiHxgB89kLm2AvvBx4VY3f+QGIKOnac7uWD62KcGsvyPsqEHIpUqEhT9ffV9BecKauKttHE7wU+FngayLf+/ZC2Yg0aE66rjebUsh8o5RuW1N0uJD50QRF9sJakYatyr8DuL7Gz0XFQjHpSsNcu/NXA00DaWWzL8s2n7U9EKimdF0S7iqYJoHw2P8QtBfsA8EteAPDKd21J10/ewHatRhcYoWSlLE1m/1ArJXravw2Rem6KmJdewpV0DRlTFRgEcn4arAokOaTrvu+K9KVYy+yFy5iLCvIj1Wm6Vom0l3b7AXfXoB208Zk+nWBm73gD44QZbguENKto3RdQi20F+xrVbr9Kd3zzvtQpoS83vIqnbnXpyt7oYx092IIV+67y8dqlyHSbSLCNJAWwH5MQz1HN0q3ir0A60Uc8n/WUbqudaCkm4amKWNy/oqUXYx0Q0oX5nsfy6J0T7H4YCoi3TaVrnq62LoLTv1M6NdekIu/jrmmonT3ZePp3sI1F5GqdNXTzdGW0i2zF6qQ7p7I66GU7j7gtK138hz9k65mL2CUriTgS0SzbdJ1T15R9gKsJ+lCdbWbonRdYlbSbV7wJtVecImpLukOpXTFXoB5AbRAurPJSKbYqkW6dmTZdhZJt2yetI1QukK6ai+0iyakW6h0bcDRtxfW6YFVB9FAWjae3pONp28v+X1f9sIlhrcXoIR0LZqUdwyRZ0rRm40gXRn11IZx7qNK9gKsF3G4pFs1mOYr3b1eUGYnZhofN3thnR5YdVBkL7wJ+O5sPL254Pd1AmlF2QvuNt3XjzFsIO20fT0E6aYUMl/77IXL9sJsMrqAuSB9ZS+ElO66km4TpSsN1VUHcgOrvcBCnmmIdOUm//KCzdRJGSvKXoD5ayJt+2FU6aaQ7lor3RPO+7brL6TaC+s4lLUW6TpVlopK4vnBho0mXYx3CPnElDBPfvLA+oqCbTRJGatiLzwEXN1RTnoV0nXjK0q6PWI/uZKC9kk3aC/Y0VpbqL0Qgt+9Cvlg/jqbTrqXSSMQmQdH6dq2F0Jbnq573UP2wsN2/S4maKxqL8hxF5FuXT6oS7pyns4VrFMby0C6XStdn3QvYFScX32sd3shG0+vy8bTv9/hLuraC76KLVK6GkgzkEE1MseXP2HkAQwRXwfcFdlGaspY0+wFmXm7C4thVeyFom3uxgy1frZgndpYFtJ1lW7blcb8PD1RCfKUH9JeGAPv7XD7boW1KqQbU7pFpLvpgbQQ6bpEeAD4I/s6ZjF0YS/ElC50E0xrm3SP0S7pSs2HoriRzxmtYlDStblyu0hUutl4+lPZePp9FXcTshcgJ90hB0dkwIEOC0oL6T5MNXuhrtLd3nKFuFWCTxq+0t0PPADcRznpVrEXQkG7Mk9XSLdLpbtgXdi2sYNhsxeEdK8q+V0nmQswvNJ1K4wJiuyFe4DXVdxHjHSFQIbM073FLrtK3xHSfYjulO5Zb92lUrvZeHpnNp6+KxtPG8/ikI2nr8rG09h5TLEXTgD3Al8UqTcr526PDWaG0HRE2rPA4/Z9q+3OetUHMHnAewLetfzPVe2FXdl4Wmf2iJi9cJFy0l1PpUtOun4gLSb9D1HhprbR2VDKGCyS7hBKV0i3qAE0gTTUz9G+0g0F0tzfLgu+A/g64NYmG7Ft6X3A90RWiSpdSz4SML7XrvvFgW3sZbF9+mg6Iu0M8JR937bS3YfJ3ZYZpP2h50Wk6z+0BJK7X2dW4AXSteUGjrLBpOuWdRQcw5RYnFMmttEfYvFCFmEH5n9MUbq9kq69EW+yb/tQunsr1F+o4+kua57zPXbZtEbz1XYb10a+L1K6ct5PAB/EtLU5i8G2h13AE/ajItJNUbpStN+3F84AT9v3bZOunOPH7NJX83IeqtoL7rarIJb69QzFpOsODGodQ5NuTOnCosWwH5MLWUVJ+RkKkF9Un3TPY7tFFbbfBNeT53b2oXQh3WLwle5pFmdRDQXS3M8HRzae3g7cbt82Jd3nlWzHJ103B/WyuJhNRmeAD7Do6wpBSNc/tp9U0j1jj2VB6c4mo/OYe67th70c86N26ZNuXXsB6gXX65LuxindWNEbsRyqKN3QrJ5BpetMOdOXUrvFed2V0pUGLYGTVIthTunac+OXxIsp3aUhXXKVC80zYg7bZYwMQ/aCfObWjAb4U+AlXtBRzpso3aL9pBQxP89i7rRbK+NpulO6j9hlm6Tbp9LdONKNKd06pOtPvw7xlDHoN9e0D9LdhQkaiPKoq3RhsejNKgTS7iE/vr6VrksofsBY2rhLSnLeROlWtRf87IXzLKbxuaT7FP0r3VWxFzYieyHFXpCT1NReiHm60G+uqUu6XdoL58gDG7WUroVPuksdSLMxgdcDv2c/aot0Y2RYlDLmi4uiWhZV7YWL3v7ddXwR4ZNuV0o31V5IGQbcZN5EVboBdK1065Bun0r3IsZO6VLpuqTbttK9RA8j+rLx9M3ZePrGij97NYbU3mnfD6l065BuEbm7NWcv2ffLZC9U8XRThgG7266C3cDFwMiyZ4CrCmpPdEq6Q88HVqR0/bQxeb+Vjac7YkP0svH0IHBoNhl9lvCTLtleyMbTG4HHnenb28TNmCjvGWoq3Ww8fRHwtwXHJ6R7wi5TSTdF6e4Bzjr77jKQ9iOYG/ldFX5zD+ah9h7MjdyUdOt4uv5AgZPe0iVdERNRpWtLa17BvNKVffqke86u55OuDA7owl6Q9tGLvWBJ898CXw1802wyesRbJZaF8AwmiO1OoJDyu1awDEr3EvmTD8rtBSi+sX8Q+AtntBsUK123AV+2F7Lx9PnAZ4GvLNhXE9yCCTg8TY3Gn42nLwA+AXxjwWq7gHOWGI+Qbi+kKl33+07shWw83Y/JQKg63dA9wJ/OJqNjNBtKKrhsL0QK1rSldItSxmR7KaSbYi9cVVB8pw66yF44izmnc9fPHvePAz+GGTD1vmw8vcH7bUyxlo1KW3t74aSn1GIpIq7yLbqxb8DkUr6aailjMG8vvArTEA7TDW7BZBWU+Usx3GaXby5Yxx2N9wTVlO5zzN8AoewFVwl35enegUm4TybdbDy9Hngl8Af2oyZDSUVRPQ+jnLcRriuQlDJml0WkewLTDkPHK8Tkk65f5yFmL7gBoqcx93+bdU4O2u2HAoXu+2TStdwwd/2sX//LwHcB7wC+BHOf/l9vxGAT0l3rQJprLWBtgxMsnhCXdItuQPluRD17QRrpHXYZK9zRFEK6tZQucKNd3mPVYAgu6VZVume9h2EokNYH6d5pl1WU7pfZZSukSz4o5wH7vogQi1LGhGzKisLHjlcIyleDLsHLeinZC9Cur3sQc+zyf4bshYt4wUb7UIspXVgs7/g24JuB7wP+zWwy+gDmfr8NuNcZQq1KNwC/rKPgCIuqLFXpys35D2kWSHuZXbZOunZk2CHaId3dxC0Qn3SrKF3/SR+yF0Kk23YgrQ7pfj7m5v6Ifd+kJivkvZ2/tstQ178sZeyME4dIId0m9oLMcl0WSINuSPc85vyHlO4p52Eu/8cO8uMPxWr8h9AXAH81m4wmsq3ZZPR+jL97F/ACu15l0o2UDmgVQ5PugtK1CBGEe4JSlO7LyE9+HdLtUunKPFliLxyq4a3dgAlIHAG+PrJOXXshFEh4HFN4xE3dc0n3nPN5mxDSrXIdJAAq6VRNla74uX9ll6lK17UXXHFRRronIvto29OFdoNpB4HjlghPsVhpzC3rCPMV0rYwNWxDQWH/+t1O3utwIQ/Zz7PLOko3NKCqVQxNujGl+wSLXeFUe2Ef8Cn7WtKMUgregFUG2Xi6m5ywu6iuLzm6EkjbRnUldqP9/buBr7LH7MNXunsj1a18hJTug3YpDXqOmGeT0XN2X62Rrn0QycNvb4XpZW4iH/8P7ZGuKN3QtsoCaa64CHW/5bydJq50Y13w0pQxm/mwRT/2Apj/MWQvnHbe+6QbshbACYTaNnE78HeB9fw2Wod0Q0HkVrGspBuzF560r8vshY8CnwZeYz+LKd3nvNQzUbovIT83XShdIV1RulA9mHYjhlj+F+bB8IbAOr7ShTS1G1K6oixe4KzjE3PbU/b8Pcz/JjdYqnVxE3kEHdoh3eeAv7Xvq5LuXGqSrX1wgXDKWJtK1/V0/WHbYi+0rnTt6xDplindGOm61+8mTDt40F9pNhk9jbmfykj3BOZ6hu65TudHg+FJt9Be8JTNVeRjusvshVPAFKMgIZ694M+BJN0xUVfn6Z506zZ+Id33YRplyGIQbw+qjUoLKd1PYdL7XlCwTtukK9bCn9hlqq97I+2S7mG7PXlANrUXwLT7kL1wluqerl+7N2Qv+KQr/0ufSrcN0hVCDSldMGRcSLq2V3aUcAnZTqdfh+FJt8he2GK+y32I/EYqurH3Ybow73E+C9kLO1gkXVEGL7PffYLuSPfkbDI6TkPStarpd4CvDRS+9u0FSFO6C411NhmdxeQtlyndNgNpd2IUyZ/b96XXwnajr2feXjhG/ULYYJTu5ygeHRWcrscKB99egDDpng2lSDmoZS/YY5gjXet3H2VYe8GtkFaVdBeUrvN5mdKFeKrmRitdsARhb6SDVFO67ycnhZC94L8Gc6J3AS8H/gbTKLsiXan8VdlesORxFTmx/G/MzePPqtHEXgg96R+kX3vhTkyXXvzHFKV7PaZd+0oX6hXCBkO6D1E8qaFPiBcwPa3YyKcQ6br1i9uyF8C0A1/pQouj0iyxu6R7knaV7h474Ol2zIPtc5F1HwQym8urpOvCqaYf83QhJwhRvEK6wRvbXvi9wGlbt/R99iu3kboebsheADMw4n7CT+s2cDP5/1JH6crIGyFd6X6/xFtPhoNCdXsh1OgeIBJIs2i7YNCdwMfI1VEK6Uph+BDpVrYYbJs6DDxkexVnSU8ZA3MNUu0FaX8yRY0/xVCd7AXZdox021K6u+wxlCnduqQL5vp9HvDpgpl6H8Tw2vNR0l2AXJCYvQA5QYj3UqZ0d2HUhdykbwfe4aah2NdysUP2ApgRbR8nnPbSBhopXfIcXSFd6S34hOcq3ZOk11+IKd0HgKuz8fTqyDqtKd1sPL0SM3HnfVQjXTk3IdKtk6t7ENNWZdrysq5/G6QbmqnD3UdV0t1NmHTbLHoj56TM062TveCS7u3ErQWYz2CoQ7prnb3gF3Z24StdId0yT3dumOFsMvrD2WT01sB6ZaQLHSldq/BvxpKu9UrPUE3p+qQrN5JPSpdJ1z5sniBXyUUoUrpgLIauA2kvt8uPER/hFIIoXT9lDOoF02RghHRnY6QrStcNpIG5BiEbLUS6QkgxOyQ2Iq1oGLBsO0QmsYBdENl4eks2nv6Itft8pJJuE6V7JYZMY0E0yElX2qgqXQfyhH0y8F2MdJ/GkEhM8fhVjGKQixuzFyBXum3bC9diGtjDzmdVR6XNka4NipyngHQtHiEfmFGEIk8X4KWYttNlIM0l3Tr2QlukKzm6onRjfmvMXrgSc67KlO5eFpWuv58ie0EmwdzGoqcbsxdOUW2k39cB3w+8KPBdCunWtReklsNtdj9FSvcI5vwlkW4g93utsxfEOnjC/8KqvxPkpCtPpGcwN2BT0i1TuscwN1kXpOumiwmqFr0R0nXP3dx5sYraz9B4mPni6THEGuunMNkEQohdKt07MQ+jh6luLzxj25CgTdKtai/Iw7SqpwtxpVtkLwj5n6PcXqjavmVSzlAbCpHu5QEt2Xi6xx6jq/irKt1X2GVU6doe3YPAizH8VkS6Wyy2qbVWulHStXALtIjSPUrxjS0NqCnp3u/MC7Yr0p2qC1Gabu3POkr3ydlk5DZS/2EUqjuRSrpBpTubjM5h0saEdLsMpL0cuM9eB7meqfbCY95nTUn3Erm1VWQvXAzUFZAeXche8Eek+aTr7yclZcwl5rJA2mm6JV03Vc0P/soxyjGnkO4r7bJI6cr3UjuliHRhUexsPOn69sJR0pTuqcj3ghjpSoO839tOm2q3LaXrE0sq6R7IxtOoj+cMF401ugfIB490qXRvBj5jX8t1SLUXHvU+azLly2HgUecBVzRE1yUNeR1TuqeA/U73NhRIq2IvhEg3xV7YGcjvjkEeIKmkC/m90xbpXsKMNi3Cg+S9waqku9aBtOsxXbGjke/dAi1XYbq1Jyi+sduyFz5ul9Jw2sxguAXTcNzGV0fp1iVdOYYYyjytB8ivS5eke4j8xqjq6fqkGyyEnQjJ0RUUKV03jclXuiF7wVWCbdkLMaUbuq5VHmZQXelCfu/4wV85RnAK3kT2K9u8Efic7XEVwVXCS6d0O5muJxtPvwb4OeDVs8loFlnteuCIHZIXwhFMviyYG/DobDK6lI2nbXq6fuP9W8wotP9j37eqdO2ghjcwr5ygHun+sfdZVdL9RGTbZY3ObdCdBNKs8jpA/kA+j3noFpKDVY3+EGBsu0kaCmy38VZMtsJ7MKTrnqsiT7eIdEP2AhhSOk2a0o3ZC272Qoh0Y56ua9scpxx1SFfuHSHdx8mRqnRPY67/FRRnLgiWmnS7UrqnMCc5K1jneuLWAszXXzhEfgNKAw0h1dMNZi/MJqPHZpPRS2aT0SftR62Rrk10fyfwWuAHvK+fIa9uVrYdIZbHva/aUrpl3Su3pJ6/zhlgR4XuagyST3sULgdHUoI+V2JuGr8XAOn1F14C/ATwPzHn+IXMK90ThIcU72CeNFICaZArQTdlLJanW5q9QH7dU1LGqrbvMtK9QN7eYqTr3vNJw4CdodFQ7uf668R6bEWk68+a0iq6It2ZXWYF65SRrtRfOMg86Z6hO0/XRyuka4cv/jpmAr23zCajX/RWkVFpKb7uAcwNNKS9QGSdyx5iNp5uz8bTe+z/XhXi4T/jfFbUwxGERqMJUguZi1/9FuA3Me3wj7ztwCIhxuyFVNK9nDJmUwBP076ne87rWbZtL5xwAokh0vWDv6lKF6qR7qPkD7A6StefNaVVdDUb8OcwvmVWsM71FHcV3AspotIAABt6SURBVGGrVzHv73WVMuZDbozKpJuNpz8DfCvmRpRx6d81m4x+OrC62wBChOEi5I1BAunOJqNT2Xh6jGZK99PkXb2QvSDbeBsmp/Me4N6C/YUgN4Lr96eQbmg0miBV6b4cM+vBL0S8QzezwM0x90kjxdMFE0y7AnO93PMZCtjVzV4Qe8G/XslZIXa2E9nGDdl4uuURqFt3AcKBNL/NuqTr9xR8SDC01F6wdtKDmGsZa8fHMRwVJN2yfTRBJ0rXjlF/mOb2Apigja90u0oZ89FE6X45Jvr+S8CvAN8ym4x+MrJulfoLtUnXoixtrFDp2mv7mcg68v4bMIQL4fJ5ZehK6aaQ7h3AJwuCNVWVboqnGzrnoePdSXh2hQvANpt5UpQy5l+vKu1b/o/7MSLiRu/7MtINBX+7UrruekECdco7hrIXOiXdrpQuGIshC31hn5r7KbcXYJF0y5SujM4qQqeka5XL8zB1H7434Sddkq5/LspINyVl5gFMgfEY6f4EJp/3VtK7ri5CSjfF0w2NRhMcJ6+QVoQ7gD8r+L4oh9YlXTdl7JynCmGedENBrtDINxlp5sP1Rl3SPY9Rc2Wkm3KNxFq4D/hCTBtyK335pOv3Em8kL8wkqEO6nypYx0Uh6VqEUjVXU+lazIgrXUk5SlG6Yi+kKF2pMFbmx1Ql3aopY9dhSC9Wfs5HlaI3gypdC/F1Q4E0MDfIN9jXdUjXzcsWpCrds+RdUReXp3yJIRtPD2La7McLVouRbiyQdg3hok5lpBuyF2KkK5/Nka69D2Q2lEb2Ajnpfswu/TYUVbpO8Ndvs/KQSiHdo5h570LnMgQh3aJ2HCPdzoYAQ/ek+7xIJLtsYATkpHsLpsGkerpl1gLEay/4qGsv+EVSylBV6T7r/EZwGhPAkmsqN1+IdG8syDBIUboftvvzc6w/jSGTbyafT6wJ6Va1F27EpOOlTG4YgoxiKiLdWDpXzF4IFTCHeSWYqnRjxCSf7WQx2CYipS17oTLpEgn+OhX/Ukj3P2JiJKn4LeB7iKdGQtheWHmlu52wqiolXaf+gnQJXXtheyQq7peOi6FrT7cq6R4jbOqHIDPd+vnN8n+LUi1SulcQrzaWonR/GbhtNhnNZYnMJqOPAYdmk9HvO7+vay9cZD4LJVXphqwFmC+EHYNkLtRRurFAGqQrXbftVlG6MXsB8qHZIa+yjr3wCbvtMtI9hwm47iPeO5PjLCXd2WR0/2wyem/Cccr6x2aT0Y8VjAOANbQXJNiSBb5LUbpg1O4L7WvXXoBwQ/GrGMWQRLq2UPI56pPuZ1NWdkz9VKUbarxyw8oNXES6ELcYSpXubDJ6bjYZ+XnC8t1Fu3yWcOWzFFweDON8lurpxrI/UmaPuANDkJ8pWKfIXggpXQiTrrTj/cxPSun+pqmnK9uMKd2q9sIlTA/rEUpI18utDg0BFqQq3S6wdqQ7s8ss8J2Q7pHAdy6eYJF0fXJxkWovxEakhVCn0thhzIULla2MIXVUWhnpyg1cl3TbLG1Xd1iwmyIoSLYXIt+lFDJ/OfDxkpjAKQz5VFG6C/aCfdBKkfxUT7fMXoiRbszTPYv5X1JJ96h9mM7FBWzvYQ+Lo9rk3mmsdDtCqLxj59kLXZJuUa7u9cApv3sawBHyxi03YZHSbdtegHqkeytmepcqCdapRW+6Jt02C36kEGUIbrZK0rbsaL6iPOfCSmP2xruDYmvBHR2VmjIGYaULeXnHGOnu9Ea+VQmkyXWPKl1Hjc6d12w8/dZsPP1jj4yuJRcRfjBWzkUZ6YZ6R+cxbfUKhiHdncwLg9VVujbP8RHipFtmLcC8EvaVbuf2gkWdKXsOk+7nCkqVbmSmW0Eq6T6BIYc+lG4T0g0q3UDRaUGRmoLy8o632P3el3B8oaBcLGUM6pFuKGBXZi+EAmmupxu6pqHyjncDr2G+PV6DR7rOtfDrLghc0r1IPsGof+z7nNd9IpQ1tNLZC2AshucHPk8lXXcd39Ntw17oSunWId0UpXsNJjhZm3Rtt/ZRipWuO49cE9QlXTdFUCAP05hdUTQaDcpJNyWI5m6rMGXMqkgh4VD2gnxepHRhXlFvUc/TjdkLEG7f8r/d5nzmK9295FZNEenuJx78leNcNtJdTaVrMaNfpZtqL6SmjEFF0rWpWDeTGERzkOLpFqm5VKULxbm6bY49b9teoGB7RaPRoLymrhRmvz/yvYtQkMu3FyAnvjaVbh1Pt0jphqbskX3e7nzmkq4U4Jc2JOc+9KCUQFqsB6Kk2zJmwOFATmhV0nWHNLYZSEshXb/CfxluwpzXOvbCVU6ebQgy/Xlo2yHSfTaiLopIt81AQmXStV3WWCCNgu2VkW6K0n1oNhn5+41tKyWHtirpum03VGmsScpYrNscshfmlK69JteS2wN+XGBk9+OP5HPtBSVdi65J9zMYBXB5MkR7AavaC276UG8pYxZV7YVb7bIq6R7DXI8i//i1mGP+y8B3/nnxJ6V0UaZ02/K06ijd3RjiiNkLsWtxEyYvNJYRk0K6KX6ubKtNpRtLGYP59pBCuru8z87YYw0VKII0e2Ev5rq49gLkvu7XAfcGAuMu6QZTDBmWdOeq+9n/ZaWzFyCcNnYVpoFWUbr+cFDwlK49Ycvg6VYdGCFIySN9LfDnkWIsIaVbRLr77bBXH4MqXcKj0WRbFGzvJoxveLHgWJ4jQLo25eklpPm5EE/nipFukafrjkg7630H86QbS6vysxcuOufhDLltVdVeENL1Z+527YVXYdr8uyLb3s/y2gvCQZLCuoUp5rN2pJs6MALCpBtTuqEuWgxdZi/UJd1Y4WrgcpGgV7E4Y4SgKulCWO3Ghq3WQVHB+RhCxW5kWxAn3ZuZn+xzDk6qVyhP90WYG64K6ZbVXoBq9oLvo4dINzV7wV3nDLnlUMteIB+N9iTAbDI6g1GJN2NU7kXgdwLbPoW533ewhKQ7m4xOkk+4AD1Mvw7dk64Ek9wMhjqk64/Bh8WbL7WAOXQ7OOIwcHw2GYWKrhShkHQxaTw7gA9Gvm+LdK8mnNpTB02UbqukaxGrvyDTQn2k9Ojy7Rzw/PeQ0hUSiZGuOzjCv9HrkO5WYB1XtVW1Fw7bGU/mSNdCLKo3Ah+YTUahNuM+vJeOdC0eY5F0V1fpRnJ1k0nXqb8QUrq+gkotYA7wIeADpGUYVJ0xtU66GJST7hfZpV8eTyANpQ3S9Yvp1EXRLB8xiNL17YUyT7cp6Z7CzJGXghOYbqh7LEVKt8he2IW55j4hhtpD6og0X+mGXgvm7AXbzvdiSihegYlRCOm6xPowJpf3pYStBdm2oIh0fR+6T6wX6VrMqG8vgJkyxZ15wCcXQWoBcyme8cWzySiFoKvOHlGXdMsCPa8F7o9F122WgktyS6N0CwY0hFBZ6Vo1dh3z09qHUES6Hy3wg0PbwdtW3UAamGP3CfG83V5TpVtGur69ICT/Ubu8jbjSlc9/O7BdSCddgZJuS5gRJt2kugSzyejbZ5PRf3feXyLsFVZRulVQtdLYrbSsdO1ItNcQ93MFbnc+doNiHzZHcbJK7H620a7SPY1RhP4kjkWoYy9IuliZ0l2oqWuV3SuAv6hwjCHSrZsyBoZ059qtbefi+Qqa2gshMvF7cvI/SYbMbZhA2iXmex/ygPvwbDKKtXeXdIuyFwRDk26bQ+Cj6It0b7XEAYZ0n7KFM+oi1G2t4ulWQTLp2vH/19G+vfAyzM0Q83MFLukWKV0Ip43tw9y0bZIuVLMY6gTS5OFRx154MeZma0q6RUq3yF4Ac0+EVKhPuqnZC1XtBcjPqwQaP4lpP7djFO3TXk9ASDdmLbjbPkt8ivcLkdd94THgalvjYm2Urp+rm5qjW4RlVbrPs8uqo9GgmHTFz22TdJ8g73UIJLVoSNI9BJwJpMUVXYcmpCtBtDqk6/utbdoL8n0b2Quh1wK/vKOcn6OYovRiL/g90w9jbKjfDGxTINfssYIRju6xNhFidSG2x/X0lL3Q5RxpApm983XAr9IO6YaUbrKnWxFVpuypmy4GBXmkGD/3EYrrvMo2XNKNqQswmSGv8D5bBtINjUYDQywXI9tqSrqnMMouFXNK19oy2wnbCxcKJrkU0r08/Xrg+/3OPlLtBXd/KdkLsEi6xzHBtNsw7WGOdGeT0UfIPd0YLpNuwTrLYC+AsRjWRun+IcaUf7tNxl9npVubdK0SOEFc6X4woR5CFaV7hHyuOsEykG6o7oLr5cdI9wLlAcDjmDm7XLFRNYgm24GcoMQ6Cyndojm9XNshRIgnyB/22zH+eNuBNN9eCJGuOwS4CpR0A+icdK13+52Yf+pH6E7pduXpVslekCHAD9Xc1wLpZuPprRgyL7MWoDrpHvKmrxHSbTN7AaoNkAiSrrO9GOk+WjI1C3i2gI0z3EU1awEWi9HIOfRJ4wLFA03KSPckeXuI7cP9rG72AsSV7kFMzY8qBfkFci/GgmigpNsNZpPRh4CfAv4VpvvYhtLt215IVbpP2hE7dRBSuuI5/r+E31clXciHeLqvl9FegPhAlZQcXVhUqC+2x9aUdEU5+0r314B3FGwnhXRF6fqFbFy0oXR90j1GPt35XpqR7jIrXeGiG1mj7AXBD5Cf/HW2F+oE0QQhz1F8s1j1LBdVSFduItdiEKWbUmkrBXUmp6yrdFNIVx4mMutvnSAas8noPObG9JXus956755NRj9esKlWSNcq/IuEA2l1PF2ZUeJTznp1SPcI5lqGCjQJBiVdey2fYl7prvQw4Muww2Lfat+WBYTKELMXnrUnsU1UId26ObqCkNKNFYAJoY7S9Un3TAOlHjoeaE/pxkj3FsoHRgC8F3gA+NlsPL2aekE0gVv0RpRuVdLwZzv24ZJukb0gnxcp3Vhh+pCne9x66I1I11YduxZ4d8FqQytdyHN118deEMwmo3cCnw/8QcNNxZRu2yoXErMX7KioFwJ/02BfIdK9CqOgUrxq97zUJd22rAU5HkgkXVvL4EriSjc0n9c++5tSpWtJ4JswN9jPA18A/GXFIJrgGHlOcVDpJhzPeeZLMPo4iQn8XUGxvQDlpHsmEogNebrH7fGdIvdja/n8s8noYkkAWEm3a8wmo79OCHiUIZYy1jrp2hsyZRr2l2IafVFXqgwx0n0mcSaHNpTuYKSL+d+3UWwv+NchdTQaALPJ6MMYq+tNmFF+Vf1cwVPkHnhdpQu5xRDLXpAar6mku4uwvRDrvYTsBTfVUNRuHXshBctIuinVB2ujd9JtCX0qXUibPeIuu2xCuiFPNzRfWAyngV1WdW+nuPGIcvFJt63MBTkeSCfdWLEbd3v+tlJzdF28HXiffV2XdJ9kkXTrJPcXka5baaypvVBGunP2gvN916Q79Ig0yEl3D3CupamqolhV0j3DYiGV1Fkj6iClvONdGFJ4sMF+TmBKBrr/V2hm3BiE5MQHjpKuTeV7mvkE92toV+kWBtKy8XRbNp5+IhtP/6X9KFZ3QdAK6dqe1rcCvwBMU3/n4Snyc1dGiEVIId0DlCvd89Qj3XMYv1fa95VsntJ9HNOurqNjawFWl3SlkMpO57NO7AWLVNK9r6Y/KDiBUai7nc+KAks+5P8XxVjWTfIHSLRqLzjWTEzpHsAUEP8m+z5Wd0EQug51lC6zyeiR2WT0bZE6sCnoW+mm2AsL2Qv2AePOMTgHq+rc8+or3Z8HvmM2GbX5MHaxDKQrWVUZHWcuQD/DgLuA220957wehHStMr0L+PWG+3HrL8jFv4r5KHIRapNuBxXG3GOKDY4Qwn+1Ha1YlqkRU7pnyGf77QtPYXpbe6gZSLNIJV3p/VQNpIFRb0UKzg1QzpHubDJ6CPivBb9timUjXVW6EYS6rV3bC0XZC8/HdMua+LkQrl5VxdN1iRqqKd09mCBMF6QbU7qy7+3A60mzF/Z4MzbcDDzStQ8XgHS3r6GdQFosZQyaebpg2kWRgnMDlL7S7RpyrJca9hKbQEj3MEq6UYSGlw6mdGkniAZepbGC6chj8D3dspzlJ8mJr+26C+4xlZEuwFeQFkiDefvlZtJydNuG2BLX0p3SdWcETrEX9hCuz1BGuqcwqWnb7b6GIN2hVC7kpLsDJd0oQkq3S0+3LHvhLkyFsNSJDWPwyzvuw6jALj3da6xybHsIsKBoyh4h3fswpHsIE9SJ3fShgSq3UNHPbQltK902PN19kXWOUWy/iL0gvbk+rZplIN2nMCP6QEk3imVUug8kTv9TBJ90y5Sfjzqku92u33axG/eYykj3VzDFsl+FGQ0Vy+OeS0GzPYHUIcBtw1W6TQJp8iApy14osxfcCR796/5Pge8rOAaxF9xiN31hcNK17U0GgXROuqsaSBvC0y0j3T9rYT++p1sWzfdRh3TBEMdQ9sJpzBxbP4pRu0UV2vy834P29dBKV67P0NkL+0PrzCaj+0qO4RSmzWwk6Vo8Rh6U7RRroXRt93gPAyjdbDw9hAmkNfVzYRilC4b8hiDd6+0xPIiZ1mkHxQ8YP5G/VrpYS5Dz5Crdtu2Fc5hub1N7oQxiL2w66YLaC1H4imeP93nbkMn7tgLf3WmXXZBulWI3sHqkex1wxGYeSD2Oov/VrxMwGOnOJqMLGO+zaSDtrzA3/IKt401OmZK9UJd0N9pesOiNdNfFXuiqgLnADeD4SqytzAXIVY9vL/RFuudov3tVRrpS5vNeTLH7IqXrP2yHVLqQ11+orXRnk9HvktePCEFmj+ha6Q5Fuhe85VBQpVsCP5DWVS1dQdHsEXcBj88mo6JCzUmweYqnWLQXuvJ03Zq612BmfG0737VscIQQ//swXelVIt0naR5IK4Mo3dRhwEXrxCD2gswErEq3Q6wq6fpKt6tZIwRFNXVfQTsqV+BWGrsKk0KVmsJzHpO6lkS6s8noLOamFqXbduYCJNgL9liOAv8C+JmCbfme7i3AMVuCcAiI0m1iL5QhlXRd0qpjL+wkt5iUdDvEqpJu30o3SLrZePpFGE/3/S3uyyXdQxhSSSqF6UzemKp0IR+V1sUQYOzx+MWJpA7uHnKly2wy+m92aqeibUF+Hf4B8NctHmtV+Eq3C+KQedJSPF1BHaULuc1RNK9b21g20tXshQguYBTdEJ4ucDlj4icxo6H+c4v7OsG8p1t16pzT5KSdSrqSMtYV6cL8KDLIc3SPkI7L9kI2nl4PfCHwew2OrSmGULpdku6NwMmeh+PKsXZx7qpAlW4RHEUnSncIe+GfYZL5v7fl7q07DUyVugsC9xwsg9KNlXdsRLrAPfb1e2oeVxt4EkOI0i66UrpCuhcKPPem9gIYpduntQDLE0h7BNNWq7THWlhJ0rVwvcK+Amn7AWxFrP8E/AnNK4v58D3dOkpXsAykGytkXpl07fQ2z9ptfSUm8+GjTQ+wAcQDv9Euu1Brkr2wRTExtWUv9FqtzVpnzzIw6VrhdAfwi13va1VTxsA8lXr3dC3h/jBwA/DVHUT7fU+36pxr7jlIufmOYG627Sw56TrbO4hRur/bwtRPTSDZH0K6XSvdout5PvI6Ba690GSOv7pw54obDLPJ6O/62M8qk25I6Xbt6f4X4Jfs618sCfrUhTtlTxOleyGRkKT+AnSXvQDtku6XYJT5kH4u5OfrBrvs0tP15z7z0Ya90HdZR8FSkG5fWGXSdatXde3pHgF+FVM273779/sd7asteyF1cj2X9PpWuufJR+FV2d7LMIHUe5sdWmP4Srcr0t2GIcSu7QVQ0u0cq0y6buHlTu0FG839li62HcAJzOSSBzAR/7qBtNQbry/S9QdIXAc8UcOeEYL4sw6nkElFH56uxBOuoTulq6TbI1Y5kHYf8LpsPH0DhnQv2PHwqw5Rfoftsmul60442LfSrRMplu0NbS3A/IzKFzuavUJI92rSSbfqFOKuWBmCdI9Tvcezslhl0n0b8AngN4AX05210Dek0d9ql+tsL6w06c4mo3MYUryC7pSakFEV0l01pftm4IcG2O8gWFnSnU1GJ4Gvx0R138j6kK7cZEq6YRxn+FQxF9JT6Cq5X5TuVRQTexvZCzAA6c4mo/tnk9EQUy4NgpUlXYDZZPRJTFV8WF/SrerpymCEVNI9adc9TzfZHzHSlVq6VfFDwJsGThVzIRZD16R7iO6U7jlMjQ8YRuluFFaadAFmk9G7gbdipnxZBwjpPt8uO1W61oc8QjcVxiAwIi0bT3dj0qAqk+5sMrpvNhl9sKVjawOidLuyF9w6CCmk+1zVYbz2ussDV0m3Y6xy9sJlzCajdwx9DC2ib08XDPntqrifVISGAdfN0V1G9KV0IS1lrKrKFZyi/5mANxIrr3TXEH72Qt2UsSqkex8dVeuyNsBZ1pd0l03p1iVdaTe9DgPeRKyF0l0zuKR7qkYaXB3S/ecV91EVfk3ddSLdrpWum0qVMgy4idIFVbqdQ0l3+SA32Q7ycnNVUJl0ewhK+bNHrBPpdq10ZXLK7SX7aMNeACXdzqH2wpLBVtISwqzq50I9pds1VOnWhDM5JfRjLyjpdgwl3eWEqN11Jt1nqe5XLyO6ztOFfkhXlO7GjAwbCkq6ywlp+HVIaVVI98mOUtT6hijdLoeg90W6p2eT0dAzOKw9lHSXE5ugdNfBWoB+lW6Xnu5TrM81WWoo6S4nxFdbF9J1y3DCepFuH0pXHsJdZi/8B+Crav5WUQFKussJVborgtlkdAbz/620pzubjB6fTUb31/mtohqUdJcTSrqrhadYHnthma67IgAl3eVEk0DaSeC3gWWqT3CZdLPxdAtTvGWdSPdzdJuJ0UcgTdETdHDEcqK2p2sHOryx3cNpDHdwxF12+eBAx9IF/gmrn72g6AlKusuJJvbCMuI0sCcbT6/ATJ1+CXjvsIfUHmaT0Wc73kUf2QuKnqD2wnJiHUkXzJxvXwl8eDYZrZO90DX6yF5Q9AQl3eXEpzFpVo8OfSAtQUj3MHA3SzDVzopB7YU1gpLucuJdwOHZZLRuSvdrMW1OSbcalHTXCOrpLiFsMOyp0hVXB0K6b8LMw/ahAY9lFaGe7hpBla6iD8jsEXcD91adTkaRpHQvJqyjWAIo6Sr6gDtpqFoL1VGqdG3xoHvRXsTSQ+0FRR9wSfcPBjuK1cVHgZ8GPlC00mwyuqefw1E0gZKuog8I6X5kNhk9PuiRrCBsfYe3DH0cinag9oKiDwjpqrWg2Hgo6Sr6wIPAjwI/M/SBKBRDY9ulS+tQvF+hUChWA6p0FQqFokco6SoUCkWPUNJVKBSKHqGkq1AoFD1CSVehUCh6hJKuQqFQ9AglXYVCoegRSroKhULRI5R0FQqFokco6SoUCkWPUNJVKBSKHqGkq1AoFD1CSVehUCh6hJKuQqFQ9AglXYVCoegR/x+DvdWxfR3DdwAAAABJRU5ErkJggg==\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "t=np.array(range(100),float)\n",
    "n=np.random.randn(len(t))\n",
    "fig=plt.figure(3)\n",
    "plt.plot(t,n)\n",
    "plt.axis('off')\n",
    "plt.savefig('../output/noise.pdf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%% erf function for noise rate - (scheme not currently used in code, instead uses Poisson generator)\n",
     "is_executing": false
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "text": [
      "C:\\Users\\Tobi\\Anaconda3\\envs\\pt-v2e\\lib\\site-packages\\ipykernel_launcher.py:19: RuntimeWarning: divide by zero encountered in double_scalars\n"
     ],
     "output_type": "stream"
    },
    {
     "name": "stdout",
     "text": [
      "sig=  0.05\tn= 0.00102ev/samp\tRn=   0.102ev/s\n",
      "desired rate: 0.1\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "# compute the expected number of temporal noise events per sample for a\n",
    "# given sigma of gaussian noise sig and threshold th\n",
    "import numpy as np\n",
    "from math import erf, sqrt\n",
    "# https://docs.python.org/3.2/library/math.html\n",
    "def phi(x):\n",
    "    'Cumulative distribution function for the standard normal distribution'\n",
    "    return (1.0 + erf(x / sqrt(2.0))) / 2.0\n",
    "\n",
    "RnHzDesired=0.1 # desired rate of noise events per second\n",
    "fsHz=100 # sample rate Hz\n",
    "theta=.15 # event threshold in log_e units, but it doesn't matter what it is\n",
    "# dumb search for best sigma\n",
    "for sig in np.linspace(0,theta,1000):\n",
    "    n=0\n",
    "    for k in range(1,100):\n",
    "        th0=k*theta\n",
    "        th1=(k+1)*theta\n",
    "        n+=k*(phi(th1/sig)-phi(th0/sig)) # weight expected # events times probability       \n",
    "        Rn=fsHz*n\n",
    "    if Rn>RnHzDesired:\n",
    "        print('sig={:6.2f}\\tn={:8.3g}ev/samp\\tRn={:8.3g}ev/s'.format(sig,n,Rn))\n",
    "        print('desired rate: {}'.format(RnHzDesired))\n",
    "        break\n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "name": "#%% compute time constants and update factors for lowpass filter\n",
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "cutoffhz=10.\n",
    "tau=1/(2*np.pi*cutoffhz)\n",
    "fs=300.\n",
    "dt=1/fs\n",
    "eps=dt/tau\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "name": "#%% 2nd order lowpass for Fig. 1\n",
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEUCAYAAAAbV1CxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxV9Z3/8dcnGyEhQNgRCBECYVFBCYpYNxS3FnBBW7eqrajtr7aurVo70xmdTm07amunWtQOrWNrx6WDXVxBkaqogKKC7LuABAgECCEk9/P7416ckCbhZrn33OX9fDzug+Tc7z3fTzySN+d8v+d8zd0RERGJl4ygCxARkfSi4BERkbhS8IiISFwpeEREJK4UPCIiElcKHhERiausoAtIBj169PDi4uKgyxARSRoLFizY5u49G3tPwROF4uJi5s+fH3QZIiJJw8zWNfWeLrWJiEhcpVXwmNlgM/u7mS03s/fNrCzomkRE0k1aBQ/wCDDD3YcC3wWeNDMLuCYRkbSS0MFjZv3N7CEze9vMqszMzay4ibYDzOwZM9tlZpVm9pyZFdV7vycwDvgtgLu/EnlrTIx/DBERqSehgwcoAS4BKoC5TTUyszxgNjAMuAq4EhgCvGZm+ZFmRcAmdz9Q76PrIttFRCROEn1W2xvu3hvAzK4Fzmqi3TRgEFDq7isj7T8EVgDXA/c38TldZhMRibOEDh53D0XZdDIw72DoRD67xszeBKYQDp71wBFmll3vrGdgZHtMfLRxF6Emlp1ozciSRZGT0ey3fpv6+zxkeyNtDm6zQ963BtvtkDZW/30Lv1//vQwLN86IbM8wIyP8Jhn2f99b5OvMjPBnNDQnkrwSOnhaYCQws5Hti4GLAdy93MzeBa4GHjWziYR/Py6IVVEX//otqg9Em53SEp8HkRkZGYT/NCMz08jKCH+dlXHw+wwyM8LfZ2UamRkZ5ES2Z2eFv87OzCA7M4OcrMgrM4MO2Rl0yMqkQ1YGudmZ5GZnkJuVScec8CsvO5P8Dlnk5YT/zO+QRV52JhkZCkWR5qRK8HQjPA7U0A6gsN73NwC/NbPbgSrgcm9iJTwzuw64DqCoqHXDQA9fMYbGdt+atfei+Uz9Jk0t8Hdom8bfqb/dG2xzvN7Xh/bTsI37/7XxyAc+f4+D7zuhyDchh5CH3z/458H360KO+6Ff17lTFwq3rQv5538efNWGnFDkz9pQiNq68PaauvDXtaEQVfvqqK0LcaAuRE1t5FXn7K+to6Y2xP7alv3DwQzyc7IoyM2ic242nTtm0aVjNl065lCYl01hfg6FeTl0y8+he6ccenbqQM+CDuR3SJW/iiKHl0r/tzf2m/aQf3q6+wpgfFQ7c58OTAcoKytr1TKtp5f2as3HJIG4O/trQ+w/EKK6to59NXVU19ZRVRP+uqqmjqqaWvbsr6Vqfx2799eyu/oAu6vDf+7ad4BNO6v5ZPNuKqpqqKqpa7SfvJxM+nTOpXfnXPp2yeWIrh3pV9iR/oUdKeqWR7+uHcnKTPS5QCLRSZXgqSB81tNQIY2fCUXFzCYBk0pKSlq7C0lyZha5zJZJF7LbvL/qA3VUVNWwfU8N2/fWsG33fsr37Gdr5X4+q6xmS2U181ZvZ0tldfhMMCIzw+hf2JHBPTsxqEc+Jb06MbRPAaW9C3S2JEknVf6PXUx4nKehEcCS1u7U3f8M/LmsrGxaa/chUl9udiZ9u3Skb5eOzbarrQuxpbKajRX7WL+9inU79rJ2exWry/fy5spth1wCLOqWx1H9OnN0v64c3a8LowZ0oSC37SEpEiupEjzPAz8zs0HuvhogcqPpScAdrd2pzngkKFmZGfQvzKN/YR7jBnU/5L1QyNlYsY+lWypZtmU3SzZX8tGnu/jbR1uA8DhTae8Cxgws5IRB3TlxUHd6FnQI4scQaZQ1NQidKMxsauTLMwhPDvgmUA6Uu/ucSJt8YBGwD7ib8HjPPUABcIy772lLDWVlZa6nU0uiq9hbw0ef7mLh+goWrKvg/fU72bO/FoAhvTpxytCenF7ai7FHFtIhKzPgaiXVmdkCd2/0eZjJEDxNFTjH3U+r164IeAA4OE16FnCTu69taw0KHklGtXUhFm+q5K1V23lr1TbeWbODmtoQ+TmZnFrak3OO6suEYb3opDEiiYGkDp4g1bvUNm3FihVBlyPSJlU1tby9ajuzlm7llSWfUb57PzlZGUwo7cUFx/Xj9NJe5GRp5py0DwVPG+mMR1JNXchZuL6Cv364mb98uIlte2oozMtmyuh+XH5CEUN6FwRdoiQ5BU8bKXgkldXWhZi7chvPLtjIy4s/o6YuxPFHduOrJw7knJF9dP+QtIqCp5V0qU3SzfY9+3lmwUaefGc963dUMaBbR75+0pFcXDZA9wtJiyh42khnPJJuQiHnlU8+49E3VjN/XQWFedlcd8pgvnriQAWQREXB00YKHklnC9bt4KHZK3l9WTnd83O44dTBfHX8QE3JlmYpeNpIwSMCC9ZV8OCry5m7Yhv9Cztyx7nD+OLRfbVEhTSqueDRqGEzzGySmU3ftWtX0KWIBG7MwEKe+PoJPPH14+nUIYtv/f59Lnr4LZZsqgy6NEkyOuOJgs54RA5VF3KeWbCBn7y4jJ37DnDN+GJumjhUN6PK53TGIyLtKjPD+PLYImbdeiqXlA3gsb+vYeL9c5izvDzo0iQJKHhEpNW65uXw7xcezbPfOJH8Dllc9Zt3ufO5jz5/RpxIYxQ8ItJmYwZ24y83foHrThnEU++t55wH32Dh+lYvhSUpTsHTDE0uEIlebnYmd503nP+5/kQALnnkbR6Zs4pQSOPIcigFTzPc/c/ufl2XLl2CLkUkaYwt7sZfv30yZ43szY9fWMo1M96jYm9N0GVJAlHwiEi769Ixm/+87DjuOf8o3l61nUm//LumXcvnFDwiEhNmxpXjBvI/N5xIbZ1z4cNv8udFm4IuSxKAgkdEYmr0gK48f+NJjDyiCzf+4X3uf2U5un8wvSl4RCTmehXk8odp45g6pj+/mLWCW59eRE1tKOiyJCC6zbgZ9ZZFCLoUkaSXk5XBT6cew4DCPB54dTlbdlXzyJVj6JybHXRpEmc642mGZrWJtC8z4ztnDuE/Lh7Fu2t2cOn0eWzfsz/osiTOFDwiEncXjenPo1eVsap8D5f8+m0279oXdEkSRwoeEQnE6aW9+N3XTmBr5X6mPvw2a7ftDbokiRMFj4gE5vgju/GH68ax70Adlz46j3XbFT7pQMEjIoE6ql8Xnrz2BKoP1PGV6QqfdKDgEZHADe/bmSevHUf1gTounT6P9durgi5JYkjBIyIJYcQR4fCpOlDH5Y/P47PK6qBLkhhR8IhIwhhxRGdmXHM8O/bUcOXj77CzSg8XTUUKnmZoWQSR+Bs9oCuPfrWMtduquPq/3mOvFpVLOQqeZugGUpFgjC/pwUOXHctHn+7ihv9ewIE6PV4nlSh4RCQhnT2yDz+64CjmrtjG9//0kR4smkL0rDYRSVhfHlvEpxX7+MXslfTrmsd3zhwSdEnSDhQ8IpLQbp44lE93VvPAq8vpV9iRqWP6B12StJGCR0QSmpnx7xcezZbKfdz53IcUd8+jrLhb0GVJG2iMR0QSXk5WBr+6bAz9C/O4/okFbNihG0yTmYJHRJJCl7xsHruqjJq6ENN+N1/TrJNYWgWPmd1lZsvMLGRm5wddj4i0zOCenfjPy45jxdY93PzHDwiFNNMtGaVV8ACzgPOAN4IuRERa55ShPbnrvOG8vOQzHp6zKuhypBUCCx4z629mD5nZ22ZWZWZuZsVNtB1gZs+Y2S4zqzSz58ysqKV9uvs77q7/U0WS3NdOKmbK6CP42cvLmLO8POhypIWCPOMpAS4BKoC5TTUyszxgNjAMuAq4EhgCvGZm+XGoU0QSzMGZbqW9C/j2H97XZIMkE2TwvOHuvd39PODpZtpNAwYB57v7/7r7TGAyMBC4/mAjM1toZtuaeA2I6U8iInGXl5PFr68cg7tz/RMLqD5QF3RJEqXAgsfdo3340mRgnruvrPfZNcCbwJR6245z9x5NvDa0b/UikggGds/nwa+MZsnmSu75y5Kgy5EoJcPkgpHAx41sXwyMiHMtIpJgJgzrzfWnDuLJd9Yz84NPgy5HopAMwdON8DhQQzuAwpbsyMzuNrONwInAY2a20cz6NNH2OjObb2bzy8s1eCmSyG47q5QxAwu567mPWF2+J+hy5DCSIXgAGpusby3eifu97t7f3TtELsH1d/ctTbSd7u5l7l7Ws2fPFhcsIvGTnZnBLy87lpysDL755EKN9yS4ZAieCsJnPQ0V0viZULvRQnAiyaNvl47cf8lolm7ZzY9fWBp0OdKMZAiexYTHeRoaAcR0NFELwYkkl9OH9eLq8cXMeGsts5d+FnQ50oRkCJ7ngXFmNujghsiNpidF3hMR+dwd5w5jeN/O3Pb0h2ytrA66HGlEoMFjZlPNbCowJrLp3Mi2U+s1exRYC8w0sylmNhmYCWwAfh3j+nSpTSTJ5GZn8tClo6mqqeXWpxfpeW4JyIJcTtbMmup8jrufVq9dEfAAMJHwpIJZwE3uvjbWNQKUlZX5/Pnz49GViLSTJ99Zx/f/9DH/PGkE15x0ZNDlpB0zW+DuZY29F+hCcO4e1cw0d18PXBTjcv6BmU0CJpWUlMS7axFpo8uOL2LWJ1v58QtL+UJJD4b0Lgi6JIlIhjGewGhygUjyMjN+fNHR5HfI4ub/+YCa2mgfliKxpuARkZTVqyCXH11wNB9/WskvZq0IuhyJUPCISEo756g+XDymP796fSXvr4/prX8SJQVPMzSrTSQ1/GDSCPp0zuW2pxfpqQYJQMHTDI3xiKSGzrnZ3Df1GFaV7+X+V5YHXU7aU/CISFo4eUhPLjuhiEfnrmbBuh1Bl5PWFDwikjbuOm84R3TpyG1Pf8i+Gl1yC4qCpxka4xFJLZ06ZPHTqcewZtteHnxVl9yCouBphsZ4RFLP+JIeXHr8AB6du5pFG3YGXU5aUvCISNq587zh9CrI5XvPfqgbSwOg4BGRtNM5N5t7zz+KpVt28/Drq4IuJ+0oeJqhMR6R1HXmiN5MHnUEv3xtBcs/2x10OWlFwdMMjfGIpLZ/njSCTh2yuPO5j7R8QhwpeEQkbXXv1IG7vziCBesq+P2764MuJ20oeEQkrV14XD9OKunOfS8sZcsurVgaDwoeEUlrZsa/nX80NXUhfvj84qDLSQsKHhFJe8U98vnOmUN4cfEWXl68JehyUp6CR0QEmHbyIEp7F/DD5xezd39t0OWkNAVPMzSdWiR9ZGdm8G8XHMWmXdX8XIvGxZSCpxmaTi2SXsqKu/GVsQN4/O9r+GRzZdDlpCwFj4hIPd87ZxhdOmbz/T/p3p5YUfCIiNRTmJ/DXecNZ+H6nfxx/oagy0lJCh4RkQYuOq4fxxd3474Xl1KxtyboclKOgkdEpAEz41/PH8nu6lp+8tLSoMtJOQoeEZFGDOvTmavHF/PUext4f31F0OWkFAWPiEgTbjpzCD07deAHMz+mThMN2o2Cpxm6j0ckvRXkZnP3l0bw8aeV/P6ddUGXkzIUPM3QfTwiMumYvpw4qDs/e3k5OzTRoF0oeEREmmFm/MuUkezZX8tPX1oWdDkpQcEjInIYQ3sXcNWJxTz13no+2qhL722l4BERicJNE4fQPT+Hf3r+Yz3RoI0UPCIiUeicm80d5w7n/fU7eXbhxqDLSWoKHhGRKF14bD+OLerKfS8uY3f1gaDLSVoKHhGRKGVkGD+cNJJte/bzy9krgy4naSl4RERaYNSArlw8pj+/eXMNq8v3BF1OUso6XAMzWwO0eiTN3Qe19rPtycxygaeAUmA/8BnwDXdfHWhhIpJ0bj+nlBc+3sK9f/2E31w9Nuhyks5hgwf4LW0IngTzsLu/BGBm3wIeAyYEW5KIJJteBbl8+4wSfvS3pby2bCunl/YKuqSkctjgcfcfxqJjM+sPfA8oA0YBHYEj3X1tI20HAA8AEwEDXgVucvf10fbn7tXAS/U2zQNua239IpLerh5/JE+9u4F7/7KEL5T0IDtTIxfRCvK/VAlwCVABzG2qkZnlAbOBYcBVwJXAEOA1M8tvQ/83AjPb8HkRSWM5WRl8/4vDWVW+lyfe1nPcWiKaS22x8oa79wYws2uBs5poNw0YBJS6+8pI+w+BFcD1wP2RbQuBoib2cay7f76UoJndCQwFzmiHn0NE0tSEYb04eUgPHnx1Oecf249u+TlBl5QUDnvGY2ZrzGx1lK9V0Xbs7qEom04G5h0Mnchn1wBvAlPqbTvO3Xs08aofOrcBFwHnuntVtPWKiDRkZvzgSyPYW1PHA68sD7qcpBHNGc+bHDq5wIDLgBeAHbEoqoGRNH5JbDFwcUt2ZGa3AJcCZ7r7zsO0vQ64DqCoqKkTKRFJd0N7F3D5CUX897x1XDFuIKV9CoIuKeFFM7ngivrfm1kW4eD5gbsvjFVh9XQjPA7U0A6gMNqdRCYz/AewmvD4EECtu5c11t7dpwPTAcrKylJlVp+IxMDNZw5l5gebuPevS/jd144n8vtFmtCayQVB/BJurM8WHVl33+ju5u6D3X105NVo6HzegRaCE5EoFObn8J0zhjB3xTZeW7Y16HISXjLM/6sgfNbTUCGNnwm1Gy0EJyLRumLcQI7skc+9f/2EA3XRDmGnp2QInsWEx3kaGgEsiXMtIiKNysnK4K7zhrO6fC9PztP06uYkQ/A8D4wzs88fvWNmxcBJkfdiRpfaRKQlzhzei/GDu/PgrBXsqtLTq5ti7s0P2ZjZvzbcBNwF/AbY3OA9d/d/jrpzs6mRL88AbgC+CZQD5e4+J9ImH1gE7APuJjzecw9QABzj7jF/Sl9ZWZnPnz8/1t2ISApYsqmSLz40l2vGH8k/TRoRdDmBMbMFTY2jRxM8LblY6e6e2YLCmup8jrufVq9dEYc+MmcW4UfmrG1Bba2m4BGRlrjj2Q95duFGXrn5VIp7tOUBK8mrueA57KU2d89owSvq0Ins25p4ndag3Xp3v8jdO7t7gbufH4/Q0aU2EWmNW84aSnZmBj9+YWnQpSSkZBjjCYxmtYlIa/QqyOWGUwfz4uItvLsmHvfZJxcFj4hIDEw7eRB9Oufyb39dQiike9Dri2YhuK+2pQN3/11bPh8kM5sETCopKQm6FBFJMh1zMrnt7FJue3oRf/5wE1NG9wu6pITR3pMLGmrRZINEpckFItIaoZAz6Zd/Z2fVAWbdeiq52Un/6zBq8Zxc0KbJBiIiqSQjw/j+ecP5dOc+Zry1NuhyEobGeEREYmh8SQ8mDOvFf85eyY69NUGXkxAUPM3QdGoRaQ93njuMvTW1/GLWiqBLSQgKnmZoOrWItIchvQv48tjwmj1rtu0NupzAKXhEROLg5olDyMnK4Ccv6qZSBY+ISBz0Ksjl+lMG88LHW1iwLr1vKlXwiIjEybRTjqRnQQd+9LelHO5WllSm4GmGJheISHvKy8nilolDWbCugpcWbwm6nMAoeJqhyQUi0t4uHtOfIb06cd+Ly9J2pVIFj4hIHGVlZnDHucNYs20vf3h3fdDlBELBIyISZxOG9WLcoG78/NUV7K5Ov5VKFTwiInFmZtx57nC2763h0TdWB11O3Cl4REQCMGpAV750TF8enbuGrZXVQZcTVwqeZmhWm4jE0u1nl1IbCvFgmj1KR8HTDM1qE5FYGtg9n8tPGMgf39vAyq17gi4nbhQ8IiIBunFCCR2zM9PqUToKHhGRAHXv1IHrTxnEy0s+S5tH6Sh4REQC9vWTw4/S+fEL6fEoHQWPiEjA8nKyuOnMIby3toJZn2wNupyYU/CIiCSAS8oGMKhHPve9uJS6UGqf9Sh4REQSQHZmBrefXcqKrXt4dsHGoMuJKQWPiEiCOOeoPowe0JX7X1lO9YG6oMuJGQVPM3QDqYjEk5lxx7nD2FJZzYy31gZdTswoeJqhG0hFJN7GDerO6aU9+dVrK9lVlZoPEFXwiIgkmO+eM4zd+2v51ZyVQZcSEwoeEZEEM7xvZy4Y3Y8Zb65l8659QZfT7hQ8IiIJ6OaJQ3GHB19JvQeIKnhERBLQgG55XD6uiKcXbGDl1t1Bl9OuFDwiIgnqW6eXkJeTxU9fWhZ0Ke1KwSMikqC6d+rAtJMH8dLiz3h/fUXQ5bSbtAoeM5tlZovM7AMzm2tmo4OuSUSkOdeefCTd83O478XUeYBoWgUPcKG7j3L30cD9wIyA6xERaVZ+hyxunFDCvNU7eGPFtqDLaReBBY+Z9Tezh8zsbTOrMjM3s+Im2g4ws2fMbJeZVZrZc2ZW1NI+3b3+Iwg6t7J0EZG4uuyEgQzo1pH7XlhKKAUeIBrkGU8JcAlQAcxtqpGZ5QGzgWHAVcCVwBDgNTPLb2mnZvakmW0E7gGuaEXdIiJxlZOVwa0TS1myuZI/f7gp6HLaLMjgecPde7v7ecDTzbSbBgwCznf3/3X3mcBkYCBw/cFGZrbQzLY18RpwsJ27X+7u/YF/Be6LyU8mItLOJo86gmF9Crj/leUcqAsFXU6bBBY87h7tf7nJwDx3//zZEe6+BngTmFJv23Hu3qOJ14ZG9vs4MNHMurfl5xARiYeMDOO755SybnsVf3yvsV9pySMZJheMBD5uZPtiYES0OzGzQjPrW2/TRcBWoNFFzs3sOjObb2bzy8vLW1KviEhMnF7ai7HFhfx81gr21STvsgnJEDzdCI8DNbQDKGzBfgqB583sIzNbRPgy3Ze8ifmJ7j7d3cvcvaxnz54tLlpEpL2ZGd89Zxjlu/fzX2+tCbqcVssKuoAoNRYO1qIduK8GxrZPOSIiwRhb3I0zhvXi4ddXcdnxRXTNywm6pBZLhjOeCsJnPQ0V0viZULvRQnAikohuO7uUPftreWTO6qBLaZVkCJ7FhMd5GhoBLIllx1oITkQS0fC+nZky6ghmvLWGrZXVQZfTYskQPM8D48xs0MENkRtNT4q8FzM64xGRRHXLxFJq65xfzE6+ZRMCDR4zm2pmU4ExkU3nRradWq/Zo8BaYKaZTTGzycBMYAPw61jWpzMeEUlURd3zuPT4Ip56dwPrtu8NupwWCfqM5+nI64bI97+KfP8vBxu4+15gArAceAJ4ElgDTHD3PXGtVkQkgdw4oYTszAzuf2V50KW0SKDB4+7WxOu0Bu3Wu/tF7t7Z3Qvc/Xx3Xxvr+nSpTUQSWa/OuVxzUjEzP9jEkk2VQZcTtaDPeBKaLrWJSKK7/tTBdOmYzc9eTp7F4hQ8IiJJrEvHbG44dTCzl25l/tpGH8SScBQ8zdClNhFJBlePL6ZnQQd+8uKypFgsTsHTDF1qE5Fk0DEnk29PKOHdtTt4fXniP1tSwSMikgK+PLaIAd068tMXlyX8YnEKHhGRFJCTlcEtE4eyZHMlf/loc9DlNEvB0wyN8YhIMpk8qh+lvQt4IMEXi1PwNENjPCKSTDIzjNvOLmXNtr08u2Bj0OU0ScEjIpJCzhzei2OLuvLzWSuoPpCYi8UpeEREUoiZcfvZpWzeVc1/z1sXdDmNUvCIiKSY8YN78IWSHvzq9VXs2V8bdDn/QMHTDE0uEJFkdfvZpezYW8NjcxNvsTgFTzM0uUBEktWoAV05e2RvHpu7hoq9NUGXcwgFj4hIirr1rFL21tTyyJxVQZdyCAWPiEiKGtq7gAuO7ceMt9ayZVfiLJGt4BERSWE3nzmUkDsPJdAS2QoeEZEUNqBbHl8ZW8Qf30ucJbIVPM3QrDYRSQU3TighK9N4IEGWyFbwNEOz2kQkFfTqnMtV44uZuWgTy7bsDrocBY+ISDq44ZTBdMrJ4v5Xgl8iW8EjIpIGCvNzmHbKIF5a/BmLNuwMtBYFj4hImvjaF46kW34OP3s52LMeBY+ISJro1CGLb542mLkrtvHWqm2B1aHgERFJI1eMG0ifzrn87KVluAezRLaCR0QkjeRmZ/LtM4awcP1OXlu2NZAaFDwiImnm4rL+DOyex09fWk4oFP+zHgVPM3QDqYikouzMDG4+cyifbK7kbx9vjnv/Cp5m6AZSEUlVk0YdwdDenbj/5eXU1oXi2reCR0QkDWVmGLeeVcrqbXt57v1P49q3gkdEJE2dNaI3o/p34eevrmB/bV3c+lXwiIikKbPwWc+nO/fx1Lsb4tavgkdEJI2dPKQHJxzZjV++tpJ9NfE561HwiIikMTPj9rNLKd+9n9++vTYufSp4RETSXFlxN04r7cnDr6+isvpAzPtLu+Axs2vMzM3s/KBrERFJFLedVcqufQd4bO6amPeVVsFjZgOBacC8oGsREUkkR/XrwrlH9eHxuavZsbcmpn0FEjxm1t/MHjKzt82sKnIGUtxE2wFm9oyZ7TKzSjN7zsyKWtFnBvA4cCOwv00/gIhICrpl4lCqDtTxyJxVMe0nqDOeEuASoAKY21QjM8sDZgPDgKuAK4EhwGtmlt/CPm8B3nT3Ba2qWEQkxQ3pXcAFx/bjt2+t5bPK6pj1E1TwvOHuvd39PODpZtpNAwYB57v7/7r7TGAyMBC4/mAjM1toZtuaeA0ws5HAVODeGP5MIiJJ76YzhlIXch6avSJmfQQSPO4e7YOBJgPz3H1lvc+uAd4EptTbdpy792jitQE4hXBYrTCztcA4YLqZfaO9fiYRkVRQ1D2PL48dwFPvbmDDjqqY9JHokwtGAh83sn0xMCLanbj7w+7e192L3b2Y8OSC69z94fYpU0Qkddw4YQiZGcaDr8bmrCfRg6cb4XGghnYAhbHs2MyuM7P5Zja/vLw8ll2JiCSUPl1yuXLcQN5fX0H1gfZ/mkFWu++x/TW2SpG1aYfup0XRZjowHaCsrCyY9WFFRAJy88ShfO/cYWRntv/5SaKf8VQQPutpqJDGz4TalRaCE5F0ld8hKyahA4kfPIsJj/M0NAJYEuvOtRCciEj7S/TgeR4YZ2aDDm6I3Gh6UuQ9ERFJMoGN8ZjZ1MiXYyJ/nmtm5UC5u8+JbHsU+BYw08zuJjzecw+wAfh1HGqcBEwqKSmJdVciImnD3IMZNzezpjqeU3/wP/J4nAeAiYQnFcwCblLfC4YAAAU6SURBVHL3tbGu8aCysjKfP39+vLoTEUl6ZrbA3csaey+wMx53j2pmmruvBy6KcTmN0hmPiEj7S/QxnkBpcoGISPtT8IiISFwFNsaTTCKTHtYFXUcC6AFsC7oIOYSOSeLRMQkb6O49G3tDwSNRM7P5TQ0WSjB0TBKPjsnh6VKbiIjElYJHRETiSsEjLTE96ALkH+iYJB4dk8PQGI+IiMSVznhERCSuFDwiIhJXCh6JGTO7y8yWmVnIzM4Pup50pGOQeMxslpktMrMPzGyumY0OuqZ4U/BILM0CzgPeCLqQNKZjkHgudPdR7j4auB+YEXA9cafgSRNm1t/MHjKzt82sysw8srZRY20HmNkzZrbLzCrN7LnIU8JbxN3fcfdVba09nbT3cdIxaLsYHJP6Sxp3jmHpCUvBkz5KgEsILxk+t6lGZpYHzAaGAVcBVwJDgNfMLD8OdaY7HafE0+7HxMyeNLONhNcXuyJGdSeswJZFkLh7w917A5jZtcBZTbSbBgwCSt19ZaT9h8AK4HrClwYws4VAU2dBx7r7hnasPZ2063GSdtHux8TdL6+3v/uAL8as+gSkM5404e6hKJtOBuYd/IsT+ewa4E1gSr1tx7l7jyZeCp1Wau/jJG0X42PyODDRzLq3rcrkouCRhkYCHzeyfTEwIs61SNN0nBLPYY+JmRWaWd96710EbAV2xL68xKHgkYa6Eb6W3dAOoLAlOzKzuyPXsU8EHjOzjWbWpx1qlCiPk45BXEVzTAqB583sIzNbRPgS3Jc8zR4hozEeaUxjfwmiWqr8kJ243wvc2/ZypAmHPU46BnHX7DFx99XA2PiVk5h0xiMNVRD+l1tDhTT+rzkJho5T4tExiZKCRxpaTPhadUMjgCVxrkWapuOUeHRMoqTgkYaeB8aZ2aCDGyI3y50UeU8Sg45T4tExiZKWRUgjZjY18uUZwA3AN4FyoNzd50Ta5AOLgH3A3YSvWd8DFADHuPueeNedbnScEo+OSftS8KQRM2vqYM9x99PqtSsCHgAmEh4YnQXc5O5rY12j6DglIh2T9qXgERGRuNIYj4iIxJWCR0RE4krBIyIicaXgERGRuFLwiIhIXCl4REQkrhQ8IiISVwoeERGJKwWPSByZ2dfMbIWZ1ZjZzmbarTUzj7x+WG/71ZFtJY18Jqth+yhrqq3X17Ut+axIayh4ROLEzI4ApgNvAROAMw/zkb8RWcAtxqWdBFwY4z5EPqeF4ETiZwiQCfzW3f8eRftyd58X45pw93ciT1EWiQud8YjEgZnNAF6PfDsrcllrRoz7LK53Ca3h6/XD7kAkRnTGIxIf9wALgF8A/w9YSPix+q2VaWYN//5mNvh+M+FLdfWNJHy575M29C3SJgoekThw91VmdvCX/ZJ2uIS2NIo+9wOf92NmPYHfA+8AN7exf5FWU/CIJKcLgI0NtmVSL2jqM7Mc4E+Rb6e4e3UMaxNploJHJDl97O4r629o5NJbfY8CRwHj3b0tl/hE2kzBI5LizOwu4DLgPHdfEnQ9IgoekRRmZhcC9wLfcPdXgq5HBBQ8IinLzAYBTwAvA4vMbFy9tyt19iNBUfCIpK4iIA84O/Kqbw5wWrwLEgEFj0jcuPurgLXgIxaZMBBy91BkHzOAGU3sv7b+/t399Wj6M7NM/vEeIJGY0ZMLRBLXV4EDwD/FuJ/9wMrDthJpJzrjEUlMk4AOka83xbivE/i/M6O1Me5LBHP3oGsQEZE0okttIiISVwoeERGJKwWPiIjElYJHRETiSsEjIiJx9f8BTmEJVDA16rsAAAAASUVORK5CYII=\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "f3dbhz=100.\n",
    "f=np.logspace(-2,4,100)\n",
    "s=2*np.pi*f\n",
    "tau=1/(2*np.pi*f3dbhz)\n",
    "a=tau*s+1\n",
    "b=a*a\n",
    "h=np.reciprocal(b)\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams.update({'font.size': 16})\n",
    "\n",
    "fig=plt.figure(5)\n",
    "plt.plot(f,h)\n",
    "plt.yscale('log')\n",
    "plt.xscale('log')\n",
    "plt.xlabel('f [Hz]')\n",
    "plt.ylabel('|H|')\n",
    "plt.savefig('../output/lowpass.pdf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%% simulate effect of lowpass and dark current on photoreceptor output for figure 3\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 2 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.signal import square\n",
    "\n",
    "dark=1 # dark current level\n",
    "sigdc1=10 # DC photocurrent for bright half\n",
    "sigdc2=1 # and dark half\n",
    "cont=1 # contrast in each half\n",
    "tau=.01 # time constant of lowpass\n",
    "nper=4 # how many periods to simulate for each half bright/dark\n",
    "thr=.1 # dvs threshold\n",
    "\n",
    "dt=np.pi/500 # timesteps per half period\n",
    "eps=dt/tau\n",
    "if eps>1: \n",
    "    print('eps={:.3g} for tau={}, increase the number of time steps per cycle'.format(eps,tau))\n",
    "    eps=1\n",
    "t=np.arange(np.pi,nper*2*2*np.pi,dt)\n",
    "npts=len(t)\n",
    "npts2=int(npts/2)\n",
    "sq=(square(t)+1)/2\n",
    "sq=np.convolve(sq,np.ones(10)/10,mode='same')\n",
    "\n",
    "\n",
    "sig=np.zeros_like(sq)\n",
    "sig[:npts2]=sigdc1*(1+cont*sq[:npts2])\n",
    "sig[npts2:]=sigdc2*(1+cont*sq[npts2:])\n",
    "\n",
    "noiseFactor=.2\n",
    "noise=noiseFactor*np.random.randn(t.shape[0])*np.sqrt(sig)\n",
    "sig=sig+noise\n",
    "darknoise=dark+noiseFactor*np.random.randn(t.shape[0])*np.sqrt(dark)\n",
    "\n",
    "cur=sig+darknoise\n",
    "logcur=np.log(cur) # log photoreceptor on sum of signal + dark current\n",
    "ph1=np.zeros_like(logcur)\n",
    "sf=np.zeros_like(logcur)\n",
    "ph1[0]=logcur[0]\n",
    "sf[0]=logcur[0]\n",
    "for i in range(0,len(t)-1):\n",
    "    tauactual=tau*max(cur)/cur[i] # nonlinear lowpass with time const tau for largest current\n",
    "    e=dt/tauactual\n",
    "    ph1[i+1]=(1-e)*ph1[i]+e*logcur[i] # only photorecptor tau changes\n",
    "    sf[i+1]=(1-eps)*sf[i]+eps*ph1[i] # src follower tau is constant\n",
    "\n",
    "# include DVS events\n",
    "lmem=sf[0]\n",
    "ons=np.zeros_like(t)\n",
    "offs=np.zeros_like(t)\n",
    "for i in range(1,len(t)):\n",
    "    if sf[i]-lmem>=thr:\n",
    "        ons[i]=1\n",
    "        lmem=sf[i]\n",
    "    elif sf[i]-lmem<=-thr:\n",
    "        offs[i]=-1\n",
    "        lmem=sf[i]\n",
    "        \n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams.update({'font.size': 16})\n",
    "\n",
    "fig,ax1=plt.subplots(sharex=True)\n",
    "ax1.plot(t,cur,'g',t,darknoise,'g')\n",
    "ax1.set_ylim([0,None])\n",
    "ax1.set_yscale('linear')\n",
    "ax1.set_xscale('linear')\n",
    "ax1.tick_params(axis='y', colors='green')\n",
    "\n",
    "ax2=ax1.twinx()\n",
    "ax2.plot(t,sf,'r-')\n",
    "\n",
    "ax2.set_ylim([0,None])\n",
    "ax2.set_yscale('linear')\n",
    "ax2.set_xscale('linear')\n",
    "ax2.tick_params(axis='y', colors='red')\n",
    "\n",
    "fig,ax3=plt.subplots(sharex=True)\n",
    "offset=8\n",
    "ax3.plot(t,offset+ons,'g', t,offset+offs,'r')\n",
    "ax3.get_xaxis().set_ticks([])\n",
    "ax3.get_yaxis().set_ticks([])\n",
    "ax3.set_aspect(3)\n",
    "\n",
    "\n",
    "# plt.xlabel('t [s]')\n",
    "# plt.ylabel('[log]')\n",
    "# plt.grid('on')\n",
    "\n",
    "\n",
    "plt.savefig('../output/photo_dark_lowpass_curves.pdf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "name": "#%% compute scene illuminance from chip illuminance\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "[1.e+00 1.e+01 1.e+02 1.e+03 1.e+04]\n",
      "[1.93580247e+02 1.93580247e+03 1.93580247e+04 1.93580247e+05\n",
      " 1.93580247e+06]\n"
     ],
     "output_type": "stream"
    }
   ],
   "source": [
    "f=2.8 # focal length\n",
    "T=0.9 # lens transmittance\n",
    "R=.18 # avg scene reflectance\n",
    "lchip=np.logspace(0,4,5,endpoint=True)\n",
    "factor=(4*f**2/T/R)\n",
    "lscene=factor*lchip\n",
    "print(lchip)\n",
    "print(lscene)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stdout",
     "text": [
      "total power=5245.084914114489\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x2b612322608>]"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 9
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "def fftnoise(f):\n",
    "    f = np.array(f, dtype='complex')\n",
    "    Np = (len(f) - 1) // 2\n",
    "    phases = np.random.rand(Np) * 2 * np.pi\n",
    "    phases = np.cos(phases) + 1j * np.sin(phases)\n",
    "    f[1:Np+1] *= phases\n",
    "    f[-1:-1-Np:-1] = np.conj(f[1:Np+1])\n",
    "    return (np.fft.ifft(f).real)\n",
    "\n",
    "def band_limited_noise(min_freq, max_freq, samples=1024, samplerate=1):\n",
    "    freqs = np.abs(np.fft.fftfreq(samples, 1/samplerate))\n",
    "    f = np.zeros(samples)\n",
    "    idx = np.where(np.logical_and(freqs>=min_freq, freqs<=max_freq))[0]\n",
    "    f[idx] = 1\n",
    "    return fftnoise(f)\n",
    "\n",
    "from scipy.io import wavfile\n",
    "\n",
    "x = band_limited_noise(0, 10000, 44100, 44100)\n",
    "x = np.int16(x * (2**15 - 1))\n",
    "wavfile.write(\"test.wav\", 44100, x)\n",
    "\n",
    "mean=np.mean(x)\n",
    "power=(np.mean(x*x)-mean*mean)\n",
    "print('total power={}'.format(power))\n",
    "from matplotlib import pyplot as plt\n",
    "plt.plot(x)\n",
    "\n",
    "plt.cla()\n",
    "freqs=np.fft.fftfreq(44100,1./44100)\n",
    "ps = np.abs(np.fft.fft(x))**2\n",
    "idx = np.argsort(freqs)\n",
    "plt.plot(freqs[idx],ps[idx])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% https://stackoverflow.com/questions/33933842/how-to-generate-noise-in-frequency-range-with-numpy\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [
    {
     "name": "stderr",
     "text": [
      "C:\\Users\\Tobi\\Anaconda3\\envs\\pt-v2e\\lib\\site-packages\\ipykernel_launcher.py:48: RuntimeWarning: divide by zero encountered in log10\n",
      "C:\\Users\\Tobi\\Anaconda3\\envs\\pt-v2e\\lib\\site-packages\\ipykernel_launcher.py:49: RuntimeWarning: divide by zero encountered in log10\n"
     ],
     "output_type": "stream"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from v2ecore.v2e_utils import _inputFileDialog as ifd\n",
    "fname=ifd([(\"AEDAT txt files\", \".txt\"),('Any type','*')])\n",
    "from v2ecore.v2e_utils import read_aedat_txt_events\n",
    "ev=read_aedat_txt_events(fname)\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "import numpy as np\n",
    "sx=346\n",
    "sy=260\n",
    "npix=sx*sy\n",
    "ntot=ev.shape[0]\n",
    "non=np.count_nonzero(ev[:,3]==1)\n",
    "noff=np.count_nonzero(ev[:,3]==0)\n",
    "ttot=max(ev[:,0])-min(ev[:,0])\n",
    "onrate=non/npix/ttot\n",
    "offrate=noff/npix/ttot\n",
    "onidx= np.where(ev[:,3]==1)\n",
    "offidx=np.where(ev[:,3]==0)\n",
    "# for each pixel, compute the spike rate\n",
    "onev= ev[onidx, :][0]\n",
    "offev=ev[offidx,:][0]\n",
    "\n",
    "onx=onev[:,1]\n",
    "ony=onev[:,2]\n",
    "offx=offev[:,1]\n",
    "offy=offev[:,2]\n",
    "\n",
    "\n",
    "\n",
    "histrange = [(0, v) for v in (sx, sy)]\n",
    "onhist,_,_= np.histogram2d(onx, ony, bins=(sx, sy), range=histrange)\n",
    "offhist,_,_= np.histogram2d(offx, offy, bins=(sx, sy), range=histrange)\n",
    "\n",
    "\n",
    "onhist=onhist.flatten()\n",
    "offhist=offhist.flatten()\n",
    "maxonhist=max(onhist)\n",
    "maxoffhist=max(offhist)\n",
    "\n",
    "\n",
    "\n",
    "onrates=np.flip(np.sort(onhist/ttot))\n",
    "offrates=np.flip(np.sort(offhist/ttot))\n",
    "\n",
    "\n",
    "logonrates=np.log10(onrates)\n",
    "logoffrates=np.log10(offrates)\n",
    "\n",
    "\n",
    "\n",
    "raterange=(-2,3)\n",
    "nbins=100\n",
    "onratehist,onbins=np.histogram(logonrates,bins=nbins, range=raterange)\n",
    "offratehist,offbins=np.histogram(logoffrates,bins=nbins, range=raterange)\n",
    "onratehist=onratehist\n",
    "offratehist=offratehist\n",
    "\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "plt.plot(onbins[:-1],(onratehist),'g',offbins[:-1],-(offratehist),'r')\n",
    "plt.xlabel('event rate (log10(Hz))')\n",
    "plt.ylabel('frequency')\n",
    "figfname=fname.replace('.txt','.pdf')\n",
    "plt.savefig(figfname)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% load DVS events from txt file, plot distribution of spike rates for ON and OFF\n",
     "is_executing": false
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total power=1\n",
      "total power=1\n",
      "total power=1000m\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from engineering_notation import EngNumber as eng\n",
    "\n",
    "dt=1e-4 # \n",
    "fs=1/dt\n",
    "totaltime=30\n",
    "t=np.arange(0,totaltime,dt)\n",
    "npts=len(t)\n",
    "    \n",
    "\n",
    "\n",
    "def blnoise(f3db,t):\n",
    "    dc=1 # and dark half\n",
    "    tau=1/(2*np.pi*f3db) # time constant of lowpass\n",
    "    eps=dt/tau\n",
    "    if eps>1: \n",
    "        print('eps={:.3g} for tau={}, decrease timestep dt'.format(eps,tau))\n",
    "        eps=1\n",
    "    \n",
    "    sig=dc*np.ones_like(t)\n",
    "\n",
    "    noiseFactor=.1\n",
    "    noise=noiseFactor*np.random.randn(t.shape[0])*np.sqrt(dc)\n",
    "    sig=sig+noise\n",
    "    \n",
    "    logcur=np.log(sig) # log photoreceptor on sum of signal + dark current\n",
    "    ph1=np.zeros_like(logcur)\n",
    "    # sf=np.zeros_like(logcur)\n",
    "    ph1[0]=np.log(dc)\n",
    "    # sf[0]=ph1[0]\n",
    "    for i in range(0,len(t)-1):\n",
    "        e=eps\n",
    "        ph1[i+1]=(1-e)*ph1[i]+e*logcur[i] # only photorecptor tau changes\n",
    "        # sf[i+1]=(1-eps)*sf[i]+eps*ph1[i] # src follower tau is constant\n",
    "        # print('x={:.2f} y1={:.2f} y2={:.2f}'.format(logcur[i],ph1[i+1],sf[i+1]))\n",
    "    \n",
    "    mean=np.mean(ph1)\n",
    "    power=(np.mean(ph1*ph1)-mean*mean)\n",
    "    ph1/=np.sqrt(power)\n",
    "    mean=np.mean(ph1)\n",
    "    power=(np.mean(ph1*ph1)-mean*mean)\n",
    "    print('total power={}'.format(eng(power)))\n",
    "    return ph1\n",
    "\n",
    "ph1=blnoise(10,t)\n",
    "ph2=blnoise(100,t)\n",
    "ph3=blnoise(1000,t)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% simulate noise and bandwidth of noise\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy.signal as signal\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def genev(ph,t,thr=1):\n",
    "    refr=5*dt\n",
    "    nons=0\n",
    "    noffs=0\n",
    "    tev=-refr # last event time\n",
    "    # # include DVS events\n",
    "    lmem=ph[0]\n",
    "    ons=np.zeros_like(t)\n",
    "    offs=np.zeros_like(t)\n",
    "    for i in range(1,len(t)):\n",
    "        if ph[i]-lmem>=thr:\n",
    "            ons[i]=1\n",
    "            nons+=1\n",
    "            lmem=ph[i]\n",
    "        elif ph[i]-lmem<=-thr:\n",
    "            offs[i]=-1\n",
    "            noffs+=1\n",
    "            lmem=ph[i]\n",
    "    return ons,offs,np.array(nons),np.array(noffs)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% compute spectogram of signal\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "ons1,offs1,_,_=genev(ph1,t)\n",
    "ons2,offs2,_,_=genev(ph2,t)\n",
    "ons3,offs3,_,_=genev(ph3,t)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% estimate power spectum\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-22-37bd15052ba7>:44: UserWarning: Attempted to set non-positive top ylim on a log-scaled axis.\n",
      "Invalid limit will be ignored.\n",
      "  plt.ylim(1e-4,0)\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 2 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.welch.html#scipy.signal.welch\n",
    "freqs, pow3 = signal.welch(ph3, fs, scaling='spectrum', average='median',window='boxcar')\n",
    "freqs, pow2 = signal.welch(ph2, fs, scaling='spectrum', average='median',window='boxcar')\n",
    "freqs, pow1 = signal.welch(ph1, fs, scaling='spectrum', average='median',window='boxcar')\n",
    "# freqs=np.fft.fftfreq(len(t),1./len(t))\n",
    "\n",
    "\n",
    "\n",
    "  #%% plot results\n",
    "\n",
    "        \n",
    "from matplotlib import pyplot as plt\n",
    "plt.rcParams.update({'font.size': 16})\n",
    "plt.rcParams['pdf.fonttype'] = 42\n",
    "\n",
    "plt.subplots(2,1,sharex=True)\n",
    "\n",
    "plt.subplot(211)\n",
    "# ax1.set_ylim([0,None])\n",
    "# ax1.set_ylim((-3,3))\n",
    "# ax1.tick_params(axis='y', colors='green')\n",
    "# ax1.plot(t,ph3+3,'r',t,ph2,'g-',t,ph1-3,'b-')\n",
    "# ax1.set_xlabel('time (s)')\n",
    "# ax1.set_ylabel('signal')\n",
    "plt.plot(t,ph3+3,'r',t,ph2,'g-',t,ph1-3,'b-')\n",
    "plt.xlim((0,2000*dt))\n",
    "\n",
    "plt.subplot(212)\n",
    "plt.xlim((0,2000*dt))\n",
    "plt.plot(t,ons3+3, t,offs3+3)\n",
    "plt.plot(t,ons2, t,offs2)\n",
    "plt.plot(t,ons1-3, t,offs1-3)\n",
    "\n",
    "plt.savefig('output/noise-time.pdf')\n",
    "plt.figure(2)\n",
    "\n",
    "\n",
    "plt.loglog(freqs,pow3,'r-',alpha=.7)\n",
    "plt.loglog(freqs,pow2,'g-',alpha=.7)\n",
    "plt.loglog(freqs,pow1,'b-',alpha=.7)\n",
    "plt.grid(True)\n",
    "plt.xlabel('freq (Hz)')\n",
    "plt.ylabel('power (sig^2/Hz)')\n",
    "plt.ylim(1e-4,0)\n",
    "# plt.gca().set_aspect('equal', adjustable='box')\n",
    "\n",
    "plt.savefig('output/lognoise.pdf')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% estimate power spectum\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "thrs=np.logspace(-1,1,40)\n",
    "nons=[]\n",
    "noffs=[]\n",
    "for thr in thrs:\n",
    "    _,_,non,noff=genev(ph3,t,thr)\n",
    "    nons.append(non)\n",
    "    noffs.append(noff)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% study haw fake event rate depends on threshold\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "Text(0, 0.5, 'event rate (Hz)')"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXyddZn38c91tmzN0jZpujctLaVFoIVaQHAEFCxIARWUxVGx0gcR3EYdHX1cZsZRH5dRZNGiDKgIVGQXREWgwiC0LIVSKJRCaeiWNF2SNPu5nj/OSQghy0mb0/ss3/frdb9yzn3u5XvKTa787uX3M3dHREQEIBR0ABERyRwqCiIi0kNFQUREeqgoiIhIDxUFERHpoaIgIiI9IkEH2B+VlZVeU1MTdAwRkazyxBNP1Lt7VX+fZXVRqKmpYdWqVUHHEBHJKma2caDPdPpIRER6qCiIiEiPrCwKZrbYzJbt3r076CgiIjklK4uCu9/l7kvLy8uDjiIiklOysiiIiEh6qCiIiEiPrL4ldV+9XNfEhrpmomEjGg4RCRmRcIhYOEQkbD3zu6dYOEQ08sayZhb0VxARSYu8LArr/vprQmtvpZUwHUTo9DCdhGknQidhOonQTpgOj9BOlA4itBNJ/PQIHooSD0XxcIx4OIaHYxAuwMMFWKQAC8ewWCEWLiAUKyQcLSQaiVAQDVEQCRGLhCiMhCmMhimMhiiIJl9HQsl5YYqiYYpiySn5viASIhRSQRKR9MnLonD8lAix7Xsg3gFdHVi8A4t3QryTULwdi3cSindgDDEAkQOdyWkIHURoI0qbR2kjQqvHaCNGKzFaPUYrUVqJsaPnfYy9FNDiBbQQo5UCWjxGV7iQrkgx8WgxHi3BosV4QQmh2ChChSUUxgooKYgwqiCS+FkYYVRBmJJY9+sIpYVRSgsjlBZGKIiER+KfVERyRF4WhbLjl8LxS4desKsTutrfOnX2ft0GXW3Jeb1/dk+t0NVOtLOVaGcbo5Lz4h0tdLW34O0txDtaoKMVOndDZyuhjhasq5VwZysh73hrLgfak1Mf7URopogmL6TJi2gi8bOZIjZ6Ec0U0ujFNFLMHoppCZXQFS0lXlAOhWWECiuIllQwqriQiuIo5UWJqSL5s7w4ypiSGKOLYxRGVVBEck3GFAUzOwH4D+A54CZ3fzDQQADhSGKieMQ3HSLFq/xdHdCxFzpa3vjZvhc6mqG9OfG6vSnxumMvsfYmYu3NVLTtoau1kXhyoq2OUHsToY4mIp3Nb95HHGhJTkmNFLPLS5LTKHZTwis+il2U0OBlNHgpzZEKOgvH4sVjCJVUMqq0jDElMapKC6gcVUBVaQFVyZ9jSmJEw7qvQSTTpbUomNm1wOnAdnd/W6/5i4CfAmHgl+7+PRJ//zYBhUBtOnNllXAUwuVQOLxnMoxB/uPGu6BtD7TuhtY9b37duhtad1HaspNRLQ1MaN5FfG8Dvrcea1tPpG0XIe96Y1vdLZZdJE5/eTl1Xkadl7PVy1lDOXVeTr2X015YSbykmnD5RMZUVFBdXsj4skLGlxdQXZZ4PaYkpgv5IgFKd0vhOuAK4NfdM8wsDFwJnEzil/9KM7sT+Lu7P2Rm1cCPgQvSnC1/hcJQNDoxDaLfwuIOrbtgbwM018Peeti7A5rrKdy7g0nNdYxv3EbXnu3Y3teItDRgxBPrxoHGxNRYW8yW+Gi2+Wi2MYa1nnhdF6qivXQK4dFTqRxbyeTRRUyqKGLS6CImjy6iurRQF9tF0iitRcHdV5hZTZ/ZC4H17r4BwMxuAs5097XJz3cCBQNt08yWAksBpk6dOtKRZShmbxSUsQf1u0g4OQGJVsneBmjeDk3boWkb7NlMaeMWSnZvpmb3ZtjzEpGW7W+0QPYmpl2vl/JavJJar+Ipr+Iur2RzaDwdZTUUVNYwubKCaWOLk1MJk0cX6RSVyH4K4prCJGBTr/e1wNFm9gHgvUAFidZFv9x9GbAMYMGCBUPcHiSBC4VhVFViqj70zR8Bse438S5oroPdtbBrI+x6jYpdr1HasJFDGjYSblxNuKstsWwzdDWH2PLqWF6JV/OaV/OIV7OJ8bSUH0Rx9UxmjK9g5rhRzKwq5aBxJRTHMubymUhGC+L/lP7a/u7utwK3prQBs8XA4pkzZ45oMAlQKAyl4xPT5AU9s3taHe6JlsbOV6BhA+GGV5jUsIHq+pc5ducTRNp2JVbYCx2vRNi4oZqX4hN50Cfxq/hE9oyaQbT6YGZOrubQieUcOrGMKaOLdSpKpI8gikItMKXX+8nA5uFswN3vAu5asGDBRSMZTDKYGZRWJ6apxyRmAdHuz1t2wo4NUP8i0fp1zNi+jqnb1/He3U8mTku1Q3yTseG1CayNT+PG+DQ2RA4iPu4wJk+ZyqETyzh8cqJ1EVahkDwWRFFYCcwys+nA68C5wPnD2YBaCvIWRaNh8lGJiV6npjrboWED1K8jtP15pm9+hqmbV3NG06OJ9epg2/bRPLdyGn/y6bwQno1PXMCs6VM5cupo5k2pYHRJbKC9iuQcc0/faXkzuxE4AagEtgHfdPdfmdlpwE9InBm41t2/sy/bX7BggWs4TtknLTth67Ow9VniW1bTUbuaWMOLPXdKverjeSp+EE/FZ1JXdhijauZx1PRqjpkxlmlji3XbrGQ1M3vC3Rf0+1k6i0K69GopXPTSSy8FHUdyRVsTbHkaalfS+dpK4ptWEmvZnviIKE/HD+If8Tm8VHgERTOO4aiZk1QkJCvlXFHoppaCpJU77Hkdalfhmx6nbcPDxLY/S4g4HUR4Oj6Dx+JzeLHwcApmHMsxs6fxrtlVVI4a8I5qkYygoiAyUlr3wGv/wF99mLaXVxDb/gwh76KTMKviB/Ng1xFsrjqemjlv512HVDNvSoUuXEvGybmioNNHkjHaGmHTY/iGFbS+8GeKGp4HYIuP4aGuw1kZPYrwQSdy7KHTOemQasqLokNsUCT9cq4odFNLQTLOns2w/q+0v3AftuFBop1NPa2IP/tCdk07lXfMP4yT56pASHBUFESC0NUBtSvxF/9C63N3U7TrReIYq+IHc58fQ8PURbxj/mGcMnc85cUqEHLg5FxR0OkjyUp16/Dnbqd19a0U7XwBgFXxg/lT/Gh21pzGe46ez7vnVBOLqP8mSa+cKwrd1FKQrFX/0hsFomEtcYyHu97GvZGTGDXvLN7/9pnMnVgWdErJUSoKIpmsfj3xZ5bT/sRvKWx+nUYv4q6uY3lizGkcccx7OGPeJCqK9VS1jBwVBZFsEI/DxodpW/kbwi/cSSTeysvxCdzmJ7Bn9tmcfcICDp9cEXRKyQE5VxR0TUFyXuseWHs7zY/9mpJtK+nwMHfFj+UfVR/ihBNP4ZS51UQ0doTso5wrCt3UUpC8UL+e9n8sg6d+Q6xrL4/HZ3NHwZnUHHc2Hzp6hm5tlWFTURDJBa27iT/5W1ofuYri5lpqvZLf+SI6j/gIHznhCKaOLQ46oWQJFQWRXBLvgnX30rziZ5Rs+QfNXsDN8ZPYdMgSPnLKsRxUNSrohJLhcq4o6JqCSNKW1bSs+BkFz99Kpxu3xN/FizM/yfmL3snB1aVBp5MMlXNFoZtaCiJJO1+l5cEfEX3mRoh3cUf8OJ6dvoRzFp3EoRPLg04nGUZFQSRf7NlM60M/IfzUdYS72rknvpBVU5ZwwZmnMUstB0lSURDJN011tD58BbbyGgq6mrm963hemf9llpz2DsoKdbdSvlNREMlXLTtpeegnRB+7krZ4iGvDZzPhvf/CB94+g5DGechbgxUFPf0iksuKRlO06NtELltJZ80JXBa/gQV/PJXv/uS/Wf3azqDTSQZSURDJB2OmU37hcuIX3MaYshK+tufb7PrlGfzwhruob2oLOp1kkKwsCma22MyW7d69O+goIlklNOskyj7/OK3v/k+Ojr7MZ1/8GH/84Se458mXg44mGSIri4K73+XuS8vLdaudyLCFoxS+8zIKP7+avXM/zMe4m1m3L+a/f/MHmts6g04nAcvKoiAiI2BUFeUfvprOC25lQkEbl6xfyvU/+hLPbtK1hnymoiCS5yKz3s2ozz1O85QTuKT9WnZecwa/+ctjxOPZe2ei7DsVBRGBkrGMWXILe0/+AceEX+DUh8/mx1f9jO17WoNOJgeYioKIJJhRfNxSop9aQbhsAl+s/7/87b8/zoNrNgadTA4gFQUReRMbN4fRn/07u464iHP9XqqXv49f3v4XunQ6KS+oKIjIW0UKqHj/D2k/dzlTo3v40FMf5adX/ZSdze1BJ5M0y6iiYGYlZvaEmZ0edBYRgdgh76XksofpLJ/GF+q/ye0/voQ1mxqCjiVplNaiYGbXmtl2M1vTZ/4iM1tnZuvN7Cu9PvpXYHk6M4nIMFVMZcxlD9Aw6xwu7Po9Ddecxe3/u2bo9SQrpbulcB2wqPcMMwsDVwKnAnOB88xsrpm9B1gLbEtzJhEZrmgRY86/hqaTf8A7Qs9x5J/O4vIbbqWtsyvoZDLC0loU3H0F0LetuRBY7+4b3L0duAk4EzgROAY4H7jIzDLq1JZI3jNj1HFLsU/cy+hCWPriUq766XfYvKsl6GQygoL4xTsJ2NTrfS0wyd2/5u6fA34HXOPu8f5WNrOlZrbKzFbV1dUdgLgi0lt46kJKP/O/7K2az+cbf8SDP1tKbUNz0LFkhARRFPrrxL3nXjd3v87d7x5oZXdfBnwbeDIWi6UhnogMadQ4xnzqXhrmfpTzu+7k71dfwrbdajHkgiCKQi0wpdf7ycDm4WxAHeKJZIBwhDHnXE7dIf/MeR2389crP8MOdcOd9YIoCiuBWWY23cxiwLnAncPZgLrOFskQZlR96HK2zfwwF7Qv554rPs/ulo6gU8l+SPctqTcCjwKzzazWzJa4eydwKXAf8Dyw3N2fG8521VIQySChENXn/5ytNe/nn1tv4PYrvkSTuuDOWhqjWURGRryLzf/zUSZuupvry/4PH77suxRGw0Gnkn7k3BjNOn0kkoFCYSZ+/Ho2TzyFj+35BTdf9S09x5CFsrIo6PSRSIYKR5j4iRt4fdwJfGzn5dz8i+/Q2dXv3eWSobKyKKilIJLBIjEmLV1O7djj+Mj2H3PLry8POpEMQ1YWBbUURDJcpIDJF/+B10sP54xX/4u/rXgw6ESSoqwsCiKSBaJFjP/kTbSHi6m5/1O8XLsl6ESSgqwsCjp9JJIdohUTiX/wV0yzrdRet4TmVj3DkOmysijo9JFI9hhz6LvZNP+LvKvzEe679ttk823w+SAri4KIZJeaM/6NDWP+icXbruLP990VdBwZhIqCiKSfGTWf/DUN0XEc/uhnWfvShqATyQCysijomoJI9gkVj6bw/N8yxhppvvHj7G5qDTqS9CMri4KuKYhkp/IZC9hy3H/y9vhqVvzyX3R9IQNlZVEQkexVc/LFvDjhTBbv+i333vaboONIHyoKInLAzbrw52yKHcSxq7/KM8+tCTqO9JJSUTCzcWb2fjP7tJl9wswWagxlEdlXFitm9IU3UmCdtN/6aVrb1dV2phj0F7uZnWhm9wF/BE4FJgBzga8Dz5rZt82sLP0x35JLF5pFstyoCbN5/e1fZUHX0zxw04+CjiNJg46nYGY/AH7m7q/181kEOB0Iu/sf0hdxYBpPQSTLxeO8/KOTGNf0ArXnP8Cc2XOCTpQX9nk8BXf/Un8FIflZp7vfHlRBEJEcEApR9ZFriFicxt9/mvYOjb8QtFSvKXSZ2ffMzHrNezJ9sUQkX5RNmMXGeV9iYecTPLD8p0HHyXupXix+Lrnsn81sTHKeDbK8iEjKDjnjX3i56DCOefGHrH/5xaDj5LVUi0Knu38ZuAb4u5kdBeipExEZGaEQYy+4hgLrYMfNn6ZTw3gGJtWiYADuvhz4EPA/wIx0hRoyjO4+Esk5FZPnsOGwz3F0++M89Iergo6Tt1ItCp/sfuHuzwHHA59JS6IUqJsLkdw056x/ZUPBXI5c+z1efVWd5gUhMtiHZvaBXq+n9fm4KS2JRCRvWThC+XnLKL7uRNbdeClTvnw34bCekz2QhvrXXtxrWtbn/enpjSYi+WhszWG8NOdSjml7hBW3Lws6Tt4Z9OG1Ny1o9pS7z09znmHRw2siucm7Onjl+8dR0baZjktWUV09PuhIOWWfH17rQ3cbicgBYeEoxR+8gjHWyPO3fTfoOHlFJ+tEJCONn72QZ8vfxVFbbmbbti1Bx8kbQ3WId5eZ3WlmdwIzul/3micikjZV7/smpdbCC7eqtXCgDHr3EfDDXq/VjaGIHFDjDz6KZ8pO4Kity9m27atUV08IOlLOG7QouPtDByqImc0BPgtUAve7+9UHat8ikrnGLf4mo244kSdv+y7VF18edJycl8rpo8VmFu3nsxlm9u9m9olB1r/WzLab2Zo+8xeZ2TozW29mXwFw9+fd/WIST0z3e1VcRPLP+FlH8kz5iRy5ZTnbtm4OOk7OG+pC80XAO4EXzGylmd1jZn8zsw3AL4An3P3aQda/DljUe4aZhYErSQzaMxc4z8zmJj87A3gYuH9fvoyI5KZxp3+DYlpZpzuR0m6o8RS2uvuX3f0g4BzgP4AvAG9z95Pd/Y4h1l8BNPSZvRBY7+4b3L0duAk4M7n8ne7+DuCCgbZpZkvNbJWZraqrqxvq+4lIDhg/60ieLT+RI7cuZ/s2tRbSKeVbUt39VXd/1N2fdve9+7HPScCmXu9rgUlmdoKZXW5mvwDuGSTHMndf4O4Lqqqq9iOGiGSTRGuhjXW6Eymthrr7KB36G4fB3f1B4MGUNmC2GFg8c+bMEYwlIplswsHzWV1xIvO3Lmf7tq8wrnpS0JFyUhAPr9UCU3q9nwwMqz2oXlJF8lOVWgtpl3JRMLMiM5s9AvtcCcwys+lmFgPOBYb1IJzGUxDJTxNnzeeZipOS1xZeDzpOTkp1jObFwNPAn5Lv56XyRLOZ3Qg8Csw2s1ozW+LuncClwH3A88Dy5BgNKVNLQSR/jTv9GxTRzou3/lfQUXJSqtcUvkXirqEHAdz9aTOrGWoldz9vgPn3MMjF5KHomoJI/po4ax5PVbyb+Vt/T93Wr1I1fnLQkXLKcMZozphzNWopiOS36u7Wwm1qLYy0VIvCGjM7Hwib2Swz+xnwv2nMJSIyoImzjuDpinczb+st7GyoDzpOTkm1KFwGHAq0Ab8DdpPopygQutAsIqPf8wVKrI219/486Cg5JdWi8D53/5q7vz05fR04I53BBqPTRyIy/bDjWBedw5T1N9DV1RV0nJyRalH4aorzREQOmJZ5n2Cqb2b1Q7cHHSVnDHr3kZmdCpxGohuK3n3WlgGd6Qw2GN19JCIAh578UXas/A48vgxO+mDQcXLCUC2FzcAqoBV4otd0J/De9EYbmE4fiQhANFbIy1POZl7LY2x8eW3QcXLCUL2krnb364GZ7n59r+lWd995gDKKiAzooFMvI45Re98VQUfJCaleU6gxs1vMbK2Zbeie0ppsELr7SES6jZ1Yw5qyf+Jt226nqWlP0HGyXqpF4X+Aq0lcRzgR+DXwm3SFGopOH4lIb8Xv/BTl1swz9/4q6ChZL9WiUOTu9wPm7hvd/VvASemLJSKSulkLTuHVcA3jnr8ej8eDjpPVUi0KrWYWAl4ys0vN7P3AuDTmEhFJmYVC7Dj0Y8yMv8Kax/4SdJyslmpR+BxQDHwGOAr4CPCxdIUSERmuQ9/7SRoppuURPeG8P4YsCmYWBj7k7k3uXuvuF7r7B939Hwcg30CZdKFZRN6ksKSMF8afyfzGh9jy+qtBx8laQxYFd+8CjjKz/obRDIQuNItIf6Ys+gxR6+Lle3V76r5KdTyFp4A7zOz3QHP3THe/NS2pRET2wfiauTxbvJDZtbfQ2vqfFBYWBh0p66R6TWEMsIPEHUeLk9Pp6QolIrKvwkcvpYqdPP2X3wYdJSul1FJw9wvTHUREZCTMeecH2Pzg1xm1+lr89CVk0JnvrJBqS0FEJCtYKMzmgy/gbZ3Pse5pjQU2XCoKIpJzDjn1Elo8xs6Hrg46StZJqSiY2fRU5h0ouiVVRAYzqqKSl4rnUdX4XNBRsk6qLYU/9DPvlpEMMhy6JVVEhtJaPJExXXVBx8g6Qw2ycwiJsZnLzewDvT4qA3Svl4hkLC+byJgdjextbqS4pDToOFljqLuPZpO49bSCxG2o3RqBi9IVSkRkf4UrJgNQv/kVps46POA02WPQouDud5B4aO1Yd3/0AGUSEdlvxVXTANizbSOoKKQs1Sea15vZvwE1vddx90+kI5SIyP4qr04Uhb31GwNOkl1SLQp3AH8H/gp0pS+OiMjIqJyYuEGyc+frASfJLqkWhWJ3/9e0JhERGUEFRaPYRSmhxs1BR8kqqd6SereZnZbWJICZnWVm15jZHWZ2Srr3JyK5bUe4isKWLUHHyCqpFoXPkigMrWa2x8wazSylEbLN7Foz225ma/rMX2Rm68xsvZl9BcDdb3f3i4CPAx8exvcQEXmLxoJqStu2Bx0jq6RUFNy91N1D7l7o7mXJ92Up7uM6YFHvGcmBe64ETgXmAueZ2dxei3w9+bmIyD5rLx7P2LgeYBuOVLu5MDP7iJn93+T7KWa2MJV13X0F0NBn9kJgvbtvcPd24CbgzOR+vg/c6+5PDpBlqZmtMrNVdXX6jy0iA4uXTqKCJpqbUjqxIaR++ugq4Fjg/OT7JvbvL/lJwKZe72uT8y4D3gOcbWYX97eiuy9z9wXuvqCqqmo/IohIrouOfuMBNklNqncfHe3uR5rZUwDuvtPMYvux3/46OHd3vxy4fMiVzRYDi2fOnLkfEUQk1xVVTgVgz7ZX4eAjgg2TJVJtKXQkrwM4gJlVAfH92G8tMKXX+8lAyveNqUM8EUlFxfjEswp76zcNsaR0S7UoXA7cBowzs+8ADwP/tR/7XQnMMrPpyRbHucCdqa6srrNFJBVjJyaeau7aqaKQqlTvProB+DLwXWALcJa7/z6Vdc3sRuBRYLaZ1ZrZEnfvBC4F7gOeB5a7e8odn6ulICKpKCgsoYEywk16gC1VKV1TMLOfAje7+7AvLrv7eQPMvwe4Z7jbS+bRNQURSUlDuIqCvVuDjpE1Uj199CTw9eSDZj8wswXpDDUUtRREJFVNBdWUtW8LOkbWSPX00fXufhqJ5wteBL5vZi+lNZmIyAhoKx7P2Hh90DGyRqothW4zgUNIdKH9woinSZEuNItIqrxsEuU009So3xepSPWJ5u6Wwb8Da4Cj3H3xEKuljU4fiUiquh9g27F5Q8BJskOqD6+9Ahzr7mqDiUhWKa5M3Ja6e9tGmD0/4DSZL9XTR8uARWb2DQAzm5pq30fpoNNHIpKq8vE1ALTWvxZskCyRalG4kkTfR923lzYSYC+mOn0kIqmqnFADQNcuPcCWiqD6PhIROSBihUXsoJxQowbbSUVQfR+JiBwwDZEqClv0AFsqgur7aL/omoKIDEfiATaNwJaKtPd9lA66piAiw9FePIGxXRqUKxWpXlPA3V8gwAfWRET2lZdOpKxuL427GygtHxN0nIw23CeaRUSyTnRMYviWHVteDTRHNsjKoqBrCiIyHMVVvUZgk0FlZVHQNQURGY7uEdj0ANvQsrIoiIgMR+WEacTd6Nr1etBRMp6KgojkvGiskAYrJ9ykojAUFQURyQs7I1UUtmiwnaGoKIhIXtAIbKlRURCRvNBeMoHKrnrcPegoGS0ri4JuSRWR4fLSiYyyFhr37Aw6SkbLyqKgW1JFZLh6HmB7XSOwDSYri4KIyHCVVCYfYNu+MeAkmU1FQUTyQsWE5ANsO/QA22BUFEQkL4wdn3iALb6zNugoGU1FQUTyQjRWwA6rINy0OegoGU1FQUTyxs5IFUUagW1QKgoikjeaC6op69AIbIPJmKJgZjPM7FdmdkvQWUQkN7WVTKCqqw6Pa4j5gaS1KJjZtWa23czW9Jm/yMzWmdl6M/sKgLtvcPcl6cwjInmubBLF1saeXQ1BJ8lY6W4pXAcs6j3DzMLAlcCpwFzgPDObm+YcIiJEx0wGYMdWPcA2kLQWBXdfAfQtyQuB9cmWQTtwE3BmOnOIiACUVNYA0LhVD7ANJIhrCpOATb3e1wKTzGysmf0cmG9mXx1oZTNbamarzGxVXV1durOKSA4ZPX4aoAfYBhMJYJ/Wzzx39x3AxUOt7O7LgGUACxYsUHeHIpKysROm0eVGfLcG2xlIEC2FWmBKr/eTgWE9TaJeUkVkX0SiMXbYaCJ6gG1AQRSFlcAsM5tuZjHgXODOAHKISB5KPMC2JegYGSvdt6TeCDwKzDazWjNb4u6dwKXAfcDzwHJ3f24421XX2SKyr5oLqylr1/XIgaT1moK7nzfA/HuAe9K5bxGR/rQXT6Cy8TE8HsdCGfP8bsbIyn8RXVMQkX1W3v0AW33QSTJSVhYFnT4SkX0VHZ0YbGfH5lcCTpKZsrIoqKUgIvtq1LjEzY+N21UU+pOVRUEtBRHZVxXjkyOw1Wuwnf5kZVEQEdlXleOnJh9gU1HoT1YWBZ0+EpF9FY5EqbcxhJv0rEJ/srIo6PSRiOyPnZFxFLdqBLb+ZGVREBHZH3sLx1HerhHY+qOiICJ5p71kIpXxeo3A1o+sLAq6piAi+6VsIkXWzu4GtRb6ysqioGsKIrI/YmMSzyrs2KwR2PrKyqIgIrI/SqoSg+001mmwnb5UFEQk74yekHiArU0jsL2FioKI5J2x1VPo8DC+Q6eP+srKoqALzSKyP8KRCM8XzWfGtvvoaG8LOk5GycqioAvNIrK/fOFFjKOBZ/7626CjZJSsLAoiIvvrsHedQ62Np/ipXwYdJaOoKIhIXgqFw9TOvIA5HWtZv/qRoONkDBUFEclbc067hL1eQMMDVwQdJWOoKIhI3iofXcmzladyxM6/sLNOvaaCioKI5Lnq91xGgXXwwj1qLUCWFgXdkioiI6VmzgLWFMxj+is30dnRHnScwGVlUdAtqSIykjqOuojx1PPM/b8LOkrgsrIoiIiMpMNPOpctVFHwpG5PVVEQkbwXjkTYOOM8Dm1/lg1rHgs6TqBUFEREgJEeR7cAAAfQSURBVDnvu5QWj1H/t58FHSVQKgoiIkD52GqeHXMKh+24j907tgUdJzAqCiIiSZXv/gxF1s7z914VdJTAqCiIiCTNeNvRrI0dxtSXf0dXZ2fQcQKRMUXBzErM7Hozu8bMLgg6j4jkp9b5S5jo23nmbzcFHSUQaS0KZnatmW03szV95i8ys3Vmtt7MvpKc/QHgFne/CDgjnblERAZy+HsuYBtjiT5xTdBRApHulsJ1wKLeM8wsDFwJnArMBc4zs7nAZGBTcrGuNOcSEelXJBrjlZpzeVvb02x84cmg4xxwaS0K7r4CaOgzeyGw3t03uHs7cBNwJlBLojAMmsvMlprZKjNbVVdXl47YIpLnJhz9QQDqXnw84CQHXhDXFCbxRosAEsVgEnAr8EEzuxq4a6CV3X2Zuy9w9wVVVVXpTSoieSkUjQUdITCRAPZp/cxzd28GLkxpA2aLgcUzZ84c0WAiIvkuiJZCLTCl1/vJwObhbEAd4omIpEcQRWElMMvMpptZDDgXuHM4G1DX2SIi6ZHuW1JvBB4FZptZrZktcfdO4FLgPuB5YLm7Pzec7aqlICKSHmm9puDu5w0w/x7gnn3drq4piIikR8Y80TwcaimIiKRHVhYFERFJj6wsCrrQLCIHhgcd4IAz9+z90mZWB+wCBqoO5YN8VgnUpyNXmg32nTJ5X/uzreGum+ryqSw32DI6vjJnX7l4fA31+f4cY9Pcvf+nf909qydg2T5+tiro7CP9fTN5X/uzreGum+ryqSyn4ys79pWLx9dQn6frGMvK00d9DNglxhCfZasD+Z1Gcl/7s63hrpvq8qksp+MrO/aVi8fXcPY1YrL69NH+MLNV7r4g6BySm3R8Sbql6xjLhZbCvloWdADJaTq+JN3ScozlbUtBRETeKp9bCiIi0oeKgoiI9FBREBGRHioK/TCzGWb2KzO7JegskhvMrMTMrjeza8zsgqDzSG4Zyd9ZOVcUzOxaM9tuZmv6zF9kZuvMbL2ZfWWwbXhi/Ogl6U0q2W6Yx9oHgFvc/SLgjAMeVrLOcI6vkfydlXNFAbgOWNR7hpmFgSuBU4G5wHlmNtfMDjOzu/tM4w58ZMlS15HisUZihMHuscm7DmBGyV7XkfrxNWKCGKM5rdx9hZnV9Jm9EFjv7hsAzOwm4Ex3/y5w+oFNKLliOMcaiWFoJwNPk5t/jMkIG+bxtXak9psvB+ck3vgrDRL/g04aaGEzG2tmPwfmm9lX0x1OcspAx9qtwAfN7Gpys3sMOTD6Pb5G8ndWzrUUBmD9zBvwqT133wFcnL44ksP6PdbcvRm48ECHkZwz0PE1Yr+z8qWlUAtM6fV+MrA5oCyS23SsSTql/fjKl6KwEphlZtPNLAacC9wZcCbJTTrWJJ3SfnzlXFEwsxuBR4HZZlZrZkvcvRO4FLgPeB5Y7u7PBZlTsp+ONUmnoI4vdYgnIiI9cq6lICIi+05FQUREeqgoiIhIDxUFERHpoaIgIiI9VBRERKSHioLkFDPrMrOnzew5M1ttZl8ws1ByPIMdZlbeZ/nbzexDZlad7CV3tZmtNbN7+tl2hZld0uv9CWZ2dxq+w8fN7IphrvOqmVX2M/9bZvbFkUsnuU5FQXJNi7vPc/dDgZOB04BvJvse+jNwVveCyQJxPHA38O/AX9z9CHefC/Q35kYFcEk/8weV7O5YJCuoKEjOcvftwFLgUjMz4EYS3QJ0ez/wJ3ffC0wg0a9M97rP9LPJ7wEHJVsiP0jOG2Vmt5jZC2Z2Q3I/3X+5f8PMHgbOMbODzOxPZvaEmf3dzA5JLneOma1JtlBW9NrXxOTyL5nZ/+ueaWbnmdmzyXW+39/3NrOvJQdh+Sswe3j/apL33F2TppyZgKZ+5u0EqoEYsB0Ym5z/J+B9ydfvBXYBDwBfAyb2s50aYE2v9ycAu0l0ShYi0SXB8cnPXgW+3GvZ+4FZyddHA39Lvn4WmJR8XZH8+XFgA1AOFAIbSXSCNhF4Dagi0cPx34Czeu2vEjgquc1ioAxYD3wx6P8umrJnUktB8oEBuHs7ic7Dzk6ef59H4pQS7n4fMAO4BjgEeMrMqlLY9uPuXuvucRID6NT0+uxmADMbBbwD+L2ZPQ38gkTLBOAR4DozuwjofZrpfnff7e6tJAZQmQa8HXjQ3es80QfODcA/9cnzTuA2d9/r7ntQZ3wyTPkynoLkKTObQWL4y+3JWTcCXydRKO5w947uZd29Afgd8LvkBeR/Av4wxC7aer3u4s3/TzUnf4aAXe4+r+/K7n6xmR0NvA942sy6l+lvu/31pd8fdWgm+0wtBclZyb/0fw5c4e7dvygfAGYBnyZRILqXPcnMipOvS4GDSJyq6a0RKB1ujuRf7K+Y2TnJ7ZuZHZF8fZC7P+bu3wDqeXNf+X09BrzLzCqTF6/PAx7qs8wK4P1mVpT8HouHm1fym1oKkmuKkqdookAn8Bvgx90funvczP4AnEPiF2i3o4ArzKyTxB9Lv3T3lb037O47zOwRM1sD3Av8cRi5LgCuNrOvJ7PdBKwGfmBms0i0Au5PzntLiyK5/y3JoRYfSC5/j7vf0WeZJ83sZhKnsjYCfx9GRhF1nS0iIm/Q6SMREemhoiAiIj1UFEREpIeKgoiI9FBREBGRHioKIiLSQ0VBRER6qCiIiEiP/w+nWcQy6u+aJgAAAABJRU5ErkJggg==\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(4)\n",
    "plt.loglog(thrs,nons,thrs,noffs)\n",
    "plt.xlabel('DVS threshold')\n",
    "plt.ylabel('event rate (Hz)')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% study haw fake event rate depends on threshold\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "svt=0.1\n",
    "ut=0.25\n",
    "kappa=0.8\n",
    "vts=np.random.normal(scale=svt,size=10000)\n",
    "ids=np.exp(-kappa*vts/ut)\n",
    "plt.figure(5)\n",
    "plt.hist(ids,bins=100)\n",
    "plt.savefig('output/lognormal.pdf')\n",
    "plt.show()\n",
    "\n",
    "import cv2\n",
    "import numpy as np\n",
    "import os\n",
    "import desktop\n",
    "from v2e_utils import *\n",
    "save=True # to write AVI\n",
    "dt=.1e-3 # frame interval sec\n",
    "w=346\n",
    "h=260\n",
    "radius=100 # of circular motion of dot\n",
    "dot_sigma=1 # gaussian sigma of dot\n",
    "circum=2*np.pi*radius\n",
    "speed_pps=3000 # final speed, pix/s\n",
    "period=circum/speed_pps\n",
    "cycles=10\n",
    "t_total=4*np.pi*radius*cycles/speed_pps\n",
    "# t_total=cycles*period\n",
    "times=np.arange(0,t_total,dt)\n",
    "theta_t=(speed_pps*speed_pps/(8*np.pi*radius*radius*cycles))*times*times\n",
    "bg=127 # background gray level\n",
    "contrast=1.25\n",
    "fg=int(bg*contrast) # foreground dot brightness\n",
    "d=int(dot_sigma*3)\n",
    "fps=60\n",
    "input_slowmotion_factor=1/(dt*fps)\n",
    "codec= 'HFYU' #'IYUV' # https://stackoverflow.com/questions/46605325/recording-video-in-uyvy-codec-in-opencv\n",
    "i=0\n",
    "out=None\n",
    "log=sys.stdout\n",
    "\n",
    "if save:\n",
    "    folder='G:\\\\Downloads\\\\v2e-moving-dot' #'/home/tobi/Downloads' #   # 'D:\\\\tobid\\\\Downloads\\\\v2e-moving-dot'\n",
    "    if not os.path.isdir(folder):\n",
    "        raise NotADirectoryError(f'{folder} does not exist')\n",
    "\n",
    "    fn=os.path.join(folder,'moving-dot.avi')\n",
    "    print(f'generating AVI {fn}')\n",
    "    fourcc = cv2.VideoWriter_fourcc(*codec)\n",
    "    out = cv2.VideoWriter(\n",
    "                fn,\n",
    "                fourcc,\n",
    "                fps,\n",
    "                (w, h))\n",
    "    log=open(os.path.join(folder,'moving-dot.txt'),'w')\n",
    "cv2name='frame'\n",
    "cv2.namedWindow(cv2name,cv2.WINDOW_NORMAL)\n",
    "cv2.resizeWindow(cv2name,w,h)\n",
    "print('hit x to exit early')\n",
    "print(f'final_speed(pixels/s): {speed_pps}\\n'\n",
    "      f'dot_sigma(pixels): {dot_sigma}\\n'\n",
    "      f'radius(pixels): {radius}\\n'\n",
    "      f'contrast(factor): {contrast}\\n'\n",
    "      f'log_contrast(base_e): {np.log(contrast)}\\n'\n",
    "      f'bg: {bg}\\n'\n",
    "      f'fg: {fg}\\n'\n",
    "      f'duration(s): {t_total}\\n'\n",
    "      f'cycles: {cycles}\\n'\n",
    "      f'dt(s): {dt}\\n'\n",
    "      f'fps(Hz): {fps}\\n'\n",
    "      f'input_slowmotion_factor: {input_slowmotion_factor}\\n'\n",
    "      f'codec: {codec}\\n'\n",
    "      ,file=log)\n",
    "log.close()\n",
    "for t,theta in zip(times,theta_t):\n",
    "    pix_arr=bg*np.ones((h,w),dtype=np.uint8)\n",
    "    # actual center of dot\n",
    "    # x=w/2+radius*np.cos(2*np.pi*t/period)\n",
    "    # y=h/2+radius*np.sin(2*np.pi*t/period)\n",
    "    x=w/2+radius*np.cos(theta)\n",
    "    y=h/2+radius*np.sin(theta)\n",
    "    # nearest pixel\n",
    "    x0,y0=round(x),round(y)\n",
    "    # range of indexes around x0,y0\n",
    "    if t>0: # make sure there is one blank frame to start with, to set baseLogFrame\n",
    "        for iy in range(-d,+d):\n",
    "            for ix in range(-d,+d):\n",
    "                thisx,thisy=int(x0+ix),int(y0+iy)\n",
    "                # distances of this pixel to float dot location\n",
    "                ddx,ddy=thisx-x,thisy-y\n",
    "                dist2=ddx*ddx+ddy*ddy\n",
    "                v=np.exp(-dist2/(dot_sigma*dot_sigma))\n",
    "                v=bg+(fg-bg)*v\n",
    "                pix_arr[thisy][thisx]=v\n",
    "    cv2.imshow(cv2name,pix_arr)\n",
    "    if save:\n",
    "        out.write(cv2.cvtColor(pix_arr, cv2.COLOR_GRAY2BGR))\n",
    "    k=cv2.waitKey(1)\n",
    "    if k==ord('x'):\n",
    "        break\n",
    "if save:\n",
    "    out.release()\n",
    "    log.close()\n",
    "    desktop.open(os.path.abspath(folder))\n",
    "cv2.destroyAllWindows()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% plot log normal distribution of generated bias currents for normal variation of threshold voltage\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Traceback (most recent call last):\n",
      "  File \"C:\\Program Files\\JetBrains\\PyCharm 2020.1.4\\plugins\\python\\helpers-pro\\jupyter_debug\\pydev_jupyter_utils.py\", line 64, in attach_to_debugger\n",
      "    debugger.prepare_to_run(enable_tracing_from_start=False)\n",
      "TypeError: prepare_to_run() got an unexpected keyword argument 'enable_tracing_from_start'\n",
      "Failed to connect to target debugger.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[[[1., 0., 0., 0.],\n",
      "          [0., 1., 0., 0.],\n",
      "          [0., 0., 1., 0.],\n",
      "          [0., 0., 0., 1.]]]])\n",
      "tensor([[[[0., 0., 0.],\n",
      "          [0., 1., 0.],\n",
      "          [0., 0., 0.]]]])\n",
      "tensor([[[[1., 0.],\n",
      "          [0., 1.]]]])\n"
     ]
    }
   ],
   "source": [
    "# https://discuss.pytorch.org/t/setting-custom-kernel-for-cnn-in-pytorch/27176\n",
    "import torch\n",
    "weights = torch.tensor([[0., 0, 0.],\n",
    "                        [0., 1., 0.],\n",
    "                        [0., 0, 0.]])\n",
    "nb_channels = 1\n",
    "h, w = 4, 4\n",
    "x = torch.eye(h, w).view(1,1,h,w)\n",
    "\n",
    "weights = weights.view(1, 1, 3, 3).repeat(1, nb_channels, 1, 1)\n",
    "\n",
    "output = torch.conv2d(x, weights)\n",
    "output_flat=output.squeeze()\n",
    "print(x)\n",
    "print(weights)\n",
    "print(output)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% play with custom kernels for CSDSVS modeling\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [
     "\n"
    ],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}